//exemplo1.cpp #include <cstdlib> #include <iostream> using namespace std; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Circulo { private: int id;
int xref, yref; int raio;
public:
Circulo (int x0, int y0, int raio); void draw();
};
Circulo::Circulo(int x0, int y0, int raio) { xref = x0;
yref = y0;
this->raio = raio; }
void Circulo::draw() {
cout << "Desenhando circulo com centro em (" << xref << ","
<< yref << ") e raio " << raio << endl; }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Retangulo {
private:
int xref, yref; int lado1, lado2; public:
Retangulo(int x0, int y0, int lado1, int lado2); void draw();
};
Retangulo::Retangulo (int x0, int y0, int lado1, int lado2) { this->xref = x0; this->yref = y0; this->lado1 = lado1; this->lado2 = lado2; } void Retangulo::draw() {
cout << "Desenhando retangulo com referencia em (" << xref << "," << yref << ") e lados "
<< lado1 << " e " <<lado2 <<endl; }
int main(int argc, char** argv) { Circulo c(10, -10, 50); Retangulo r(-8, -8, 10, 30); c.draw(); r.draw(); return 0; }
Display(COR _fundo=COR{255,255,255}); void mostrar(int ms); void limpar(); } disp; int Display::conta=0; Display::Display(COR _fundo) { fundo=_fundo; img.create(480,640); img.setTo(fundo); nomeJanela="DISPLAY"+to_string(conta); conta++; namedWindow(nomeJanela); } void Display::mostrar(int ms) { imshow(nomeJanela,img); waitKey(ms); } void Display::limpar() { img.setTo(fundo); } //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Circulo { private:
int xref, yref; int raio;
public:
Circulo (int x0, int y0, int raio); void draw();
};
Circulo::Circulo(int x0, int y0, int raio) { this->xref = x0;
this->yref = y0; this->raio = raio; }
void Circulo::draw() {
circle(disp.img, Point(xref,yref), raio, Scalar(0,0,0), 3 ); }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Retangulo {
private:
int xref, yref; int lado1, lado2; public:
Retangulo(int x0, int y0, int lado1, int lado2); void draw();
};
Retangulo::Retangulo (int x0, int y0, int lado1, int lado2) { this->xref = x0; this->yref = y0; this->lado1 = lado1; this->lado2 = lado2; } void Retangulo::draw() { rectangle(disp.img, Point(xref,yref), Point(xref+lado1,yref+lado2), Scalar(0,0,0), 3 ); } //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< int main(int argc, char** argv) {
Circulo c(100, 100, 50); Retangulo r(200, 200, 60, 90); c.draw(); r.draw(); disp.mostrar(0); return 0; }
Para compilar e executar este programa, instale biblioteca Cekeikon4/OpenCV de acordo com:
Shape (int x0, int y0); void draw();
void move (int deltax, int deltay); };
Shape::Shape(int x0, int y0) { this->xref = x0;
this->yref = y0; }
void Shape::draw() {
cout << "Nao sentido desenhar uma forma generica! Referencia (" << xref << "," << yref << ")" << endl;
}
void Shape::move(int deltax, int deltay){ this->xref += deltax;
this->yref += deltay; }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Circulo : public Shape {
private: int raio; public:
Circulo(int x0, int y0, int raio); void draw();
};
Circulo::Circulo(int x0, int y0, int raio) : Shape (x0,y0) { this->raio = raio;
}
void Circulo::draw() {
cout << "Desenhando circulo com centro em (" << xref << ","
<< yref << ") e raio " << raio << endl; }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Retangulo : public Shape {
private:
int lado1, lado2; public:
Retangulo(int x0, int y0, int lado1, int lado2); void draw();
};
Retangulo::Retangulo(int x0, int y0, int lado1, int lado2) : Shape(x0, y0) {
this->lado2 = lado2; }
void Retangulo::draw() {
cout << "Desenhando retangulo com referencia em (" << xref << "," << yref << ") e lados "
<< lado1 << " e " <<lado2 <<endl; }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Figura {
public:
Figura();
void transladar (int deltax, int deltay); void draw();
~Figura(); private:
Shape *formas[10];//a figura pode ter até 10 formas int numerodeformas = 0; }; Figura::Figura() { formas[numerodeformas]=new Circulo(100,100,50); numerodeformas++; formas[numerodeformas]=new Retangulo(200,200,60,90); numerodeformas++; }
void Figura::transladar(int deltax, int deltay) { for (int i = 0; i < numerodeformas; i++) { formas[i]->move(deltax, deltay);
} }
void Figura::draw() {
for (int i = 0; i < numerodeformas; i++) { formas[i]->draw();
} }
Figura::~Figura() {
for (int i = 0; i < numerodeformas; i++) { delete formas[i];
} }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< int main(int argc, char** argv) {
Figura f; f.draw();
f.transladar(2,3); f.draw();
Shape (int x0, int y0); virtual void draw();
void move (int deltax, int deltay); virtual ~Shape();
};
Shape::Shape(int x0, int y0) { this->xref = x0;
this->yref = y0; }
void Shape::draw() {
cout << "Nao sentido desenhar uma forma generica! Referencia (" << xref << "," << yref << ")" << endl;
}
void Shape::move(int deltax, int deltay){ this->xref += deltax; this->yref += deltay; } Shape::~Shape() {} //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Circulo : public Shape {
private: int raio; public:
Circulo(int x0, int y0, int raio); void draw();
};
Circulo::Circulo(int x0, int y0, int raio) : Shape (x0,y0) { this->raio = raio;
}
void Circulo::draw() {
cout << "Desenhando circulo com centro em (" << xref << ","
<< yref << ") e raio " << raio << endl; }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Retangulo : public Shape {
private:
int lado1, lado2; public:
Retangulo(int x0, int y0, int lado1, int lado2); void draw();
Retangulo::Retangulo(int x0, int y0, int lado1, int lado2) : Shape(x0, y0) { this->lado1 = lado1; this->lado2 = lado2; } void Retangulo::draw() {
cout << "Desenhando retangulo com referencia em (" << xref << "," << yref << ") e lados "
<< lado1 << " e " <<lado2 <<endl; }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Figura {
public:
Figura();
void transladar (int deltax, int deltay); void draw();
~Figura(); private:
Shape *formas[10];//a figura pode ter até 10 formas int numerodeformas = 0; }; Figura::Figura() { formas[numerodeformas]=new Circulo(100,100,50); numerodeformas++; formas[numerodeformas]=new Retangulo(200,200,60,90); numerodeformas++; }
void Figura::transladar(int deltax, int deltay) { for (int i = 0; i < numerodeformas; i++) { formas[i]->move(deltax, deltay);
} }
void Figura::draw() {
for (int i = 0; i < numerodeformas; i++) { formas[i]->draw();
} }
Figura::~Figura() {
for (int i = 0; i < numerodeformas; i++) { delete formas[i];
} }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< int main(int argc, char** argv) {
Figura f; f.draw();
f.transladar(2,3); f.draw();
Shape (int x0, int y0); virtual void draw()=0;
void move (int deltax, int deltay); virtual ~Shape();
};
Shape::Shape(int x0, int y0) { this->xref = x0;
this->yref = y0; }
// void Shape::draw() {
// cout << "Nao sentido desenhar uma forma generica! Referencia (" // << xref << "," << yref << ")" << endl;
// }
void Shape::move(int deltax, int deltay){ this->xref += deltax; this->yref += deltay; } Shape::~Shape() {} //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Circulo : public Shape {
private: int raio; public:
Circulo(int x0, int y0, int raio); void draw();
};
Circulo::Circulo(int x0, int y0, int raio) : Shape (x0,y0) { this->raio = raio;
}
void Circulo::draw() {
cout << "Desenhando circulo com centro em (" << xref << ","
<< yref << ") e raio " << raio << endl; }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Retangulo : public Shape {
private:
int lado1, lado2; public:
Retangulo(int x0, int y0, int lado1, int lado2); void draw();
Retangulo::Retangulo(int x0, int y0, int lado1, int lado2) : Shape(x0, y0) { this->lado1 = lado1; this->lado2 = lado2; } void Retangulo::draw() {
cout << "Desenhando retangulo com referencia em (" << xref << "," << yref << ") e lados "
<< lado1 << " e " <<lado2 <<endl; }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Figura {
public:
Figura();
void transladar (int deltax, int deltay); void draw();
~Figura(); private:
Shape *formas[10];//a figura pode ter até 10 formas int numerodeformas = 0; }; Figura::Figura() { formas[numerodeformas]=new Circulo(100,100,50); numerodeformas++; formas[numerodeformas]=new Retangulo(200,200,60,90); numerodeformas++; }
void Figura::transladar(int deltax, int deltay) { for (int i = 0; i < numerodeformas; i++) { formas[i]->move(deltax, deltay);
} }
void Figura::draw() {
for (int i = 0; i < numerodeformas; i++) { formas[i]->draw();
} }
Figura::~Figura() {
for (int i = 0; i < numerodeformas; i++) { delete formas[i];
} }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< int main(int argc, char** argv) {
Figura f; f.draw();
f.transladar(2,3); f.draw();
Display(COR _fundo=COR{255,255,255}); void mostrar(int ms); void limpar(); } disp; int Display::conta=0; Display::Display(COR _fundo) { fundo=_fundo; img.create(480,640); img.setTo(fundo); nomeJanela="DISPLAY"+to_string(conta); conta++; namedWindow(nomeJanela); } void Display::mostrar(int ms) { imshow(nomeJanela,img); waitKey(ms); } void Display::limpar() { img.setTo(fundo); } //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Shape { protected: int id;
int xref, yref; public:
Shape (int x0, int y0);
virtual void draw()=0; //alterado void move (int deltax, int deltay); virtual ~Shape(); // alterado
};
Shape::Shape(int x0, int y0) { this->xref = x0;
this->yref = y0; }
void Shape::move(int deltax, int deltay){ this->xref += deltax; this->yref += deltay; } Shape::~Shape() {} //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
class Circulo : public Shape { private:
int raio; public:
Circulo(int x0, int y0, int raio); void draw();
};
Circulo::Circulo(int x0, int y0, int raio) : Shape (x0,y0) { this->raio = raio;
}
void Circulo::draw() {
circle(disp.img, Point(xref,yref), raio, Scalar(0,0,0), 3 ); }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Retangulo : public Shape {
private:
int lado1, lado2; public:
Retangulo(int x0, int y0, int lado1, int lado2); void draw();
};
Retangulo::Retangulo(int x0, int y0, int lado1, int lado2) : Shape(x0, y0) { this->lado1 = lado1; this->lado2 = lado2; } void Retangulo::draw() { rectangle(disp.img, Point(xref,yref), Point(xref+lado1,yref+lado2), Scalar(0,0,0), 3 ); } //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Figura { public: Figura();
void transladar (int deltax, int deltay); void draw();
~Figura(); private:
Shape *formas[10];//a figura pode ter até 10 formas int numerodeformas = 0; }; Figura::Figura() { formas[numerodeformas]=new Circulo(100,100,50); numerodeformas++; formas[numerodeformas]=new Retangulo(200,200,60,90); numerodeformas++; }
void Figura::transladar(int deltax, int deltay) { for (int i = 0; i < numerodeformas; i++) { formas[i]->move(deltax, deltay);
} }
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< int main(int argc, char** argv) {
Figura f; f.draw(); disp.mostrar(0); disp.limpar(); f.transladar(100, 100); f.draw(); disp.mostrar(0); }
//exemplo5-hae.cpp #include <cstdlib> #include <iostream> using namespace std; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class Equipamento { public: Equipamento(); ~Equipamento();
static void mostraCorrenteTotal(); //alterado Hae void mostraId();
private:
static float correnteTotal;
//total da corrente consumida pelos equipamentos. int id, corrente;
};
Equipamento::Equipamento() {
cout << "Forneca o identificador (inteiro): "; cin >> this-> id;
cout << "Forneca o consumo de corrente (A): "; cin >> this->corrente;
correnteTotal += this->corrente; }
Equipamento::~Equipamento() {
cout << "Destruindo equipamento numero: " << this->id << endl; correnteTotal = correnteTotal - this->corrente;
return; }
void Equipamento::mostraCorrenteTotal() { //metodo estatico-alterado Hae
cout << "Corrente total e' " << correnteTotal << endl; }
void Equipamento::mostraId() { //metodo nao estatico cout << "ID e' " << this->id << endl;
}
float Equipamento::correnteTotal = 0; //definicao do atributo estatico //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
int main() {
Equipamento::mostraCorrenteTotal();
//posso acionar o metodo mesmo sem instâncias! Equipamento *e1, *e2;
e1 = new Equipamento(); e1->mostraId();
e1->mostraCorrenteTotal(); // a instancia acessa o metodo estatico e2 = new Equipamento(); e2->mostraId(); Equipamento::mostraCorrenteTotal(); delete (e2); Equipamento::mostraCorrenteTotal(); delete (e1); Equipamento::mostraCorrenteTotal(); return 0; }
}
void imprimir() {
cout << estatico << endl; } }; int Classe::estatico = 0; int main() { Classe c; c.imprimir(); Classe d; d.imprimir(); }