Solução Exercício Polimorfismo
Ir para navegação
Ir para pesquisar
Versão mais simples:
#include <iostream>
using namespace std;
/*************/
class FormaGeometrica {
public:
float area;
float perimetro;
virtual void Entraparam()=0; //metodos virtuais puros
virtual float CalculaArea() =0;
virtual float CalculaPerimetro()=0;
};
/*************/
class Circulo: public FormaGeometrica {
private:
float raio;
public:
void Entraparam()
{ cout<< "\nEntre com o raio do circulo: "<< endl;
cin>>raio; }
float CalculaArea()
{ area = 3.14159 *raio*raio;
return area;}
float CalculaPerimetro()
{ perimetro = 2*3.14159 *raio;
return perimetro;}
~Circulo() { cout << "\n\nDestrói circulo" << endl; }
};
/*************/
class Retangulo: public FormaGeometrica {
private:
float altura;
float largura;
public:
void Entraparam()
{ cout<< "\nEntre com o valor da altura do retangulo: "<< endl;
cin>>altura;
cout<< "\nEntre com o valor da largura do retangulo: "<< endl;
cin>>largura; }
float CalculaArea()
{ area = altura*largura;
return area;}
float CalculaPerimetro()
{ perimetro = 2*altura + 2*largura;
return perimetro;}
~Retangulo() { cout << "\n\nDestrói retangulo" << endl; }
};
/*************/
class Quadrado: public FormaGeometrica{
private:
float lado;
public:
void Entraparam()
{ cout<< "\nEntre com o comprimento do lado do quadrado: "<< endl;
cin>>lado; }
float CalculaArea()
{ area = lado*lado;
return area;}
float CalculaPerimetro()
{ perimetro = 4*lado;
return perimetro;}
~Quadrado() { cout << "\n\nDestrói quadrado" << endl; }
};
/*************/
int main(void) {
char op;
Circulo c1;
Retangulo r1;
Quadrado q1;
cout<< "*** PROGRAMA DE GEOMETRIA ****"<< endl;
cout<<"\n\nDigite qual sua forma geometrica desejada: "<< endl;
cout<<"\n(c) Circulo; \n(r) Retangulo; \n(q) Quadrado \n>> "<< endl;
cin>> op;
switch(op)
{ case '1':
case 'c':
case 'C': c1.Entraparam();
cout<< "\nArea de saida: "<< c1.CalculaArea() << endl;
cout<< "\nPerimetro de saida: "<< c1.CalculaPerimetro() <<endl;
break;
case '2':
case 'r':
case 'R': r1.Entraparam();
cout<< "\nArea de saida: "<< r1.CalculaArea() <<endl;
cout<< "\nPerimetro de saida: "<< r1.CalculaPerimetro() <<endl;
break;
case '3':
case 'q':
case 'Q': q1.Entraparam();
cout<< "\nArea de saida: "<< q1.CalculaArea() << endl;
cout<< "\nPerimetro de saida: "<< q1.CalculaPerimetro() << endl;
break;
default: cout<< "\nTipo invalido/inexistente!!"<<endl;
}
return 0;
}
Versão mais elegante (usando ponteiros):
#include <iostream>
using namespace std;
/*************/
class FormaGeometrica {
public:
float area;
float perimetro;
virtual void Entraparam()=0;
virtual float CalculaArea() =0;
virtual float CalculaPerimetro()=0;
};
/*************/
class Circulo: public FormaGeometrica {
private:
float raio;
public:
void Entraparam()
{ cout<< "\nEntre com o raio do circulo [cm]: "<< endl;
cin>>raio; }
float CalculaArea()
{ area = 3.14159 *raio*raio;
return area;}
float CalculaPerimetro()
{ perimetro = 2*3.14159 *raio;
return perimetro;}
~Circulo() { cout << "\n\nDestroi circulo" << endl; }
};
/*************/
class Retangulo: public FormaGeometrica {
private:
float altura;
float largura;
public:
void Entraparam()
{ cout<< "\nEntre com o valor da altura do retangulo [cm]: "<< endl;
cin>>altura;
cout<< "\nEntre com o valor da largura do retangulo [cm]: "<< endl;
cin>>largura; }
float CalculaArea()
{ area = altura*largura;
return area;}
float CalculaPerimetro()
{ perimetro = 2*altura + 2*largura;
return perimetro;}
~Retangulo() { cout << "\n\nDestroi retangulo" << endl; }
};
/*************/
class Quadrado: public FormaGeometrica{
private:
float lado;
public:
void Entraparam()
{ cout<< "\nEntre com o comprimento do lado do quadrado [cm]: "<< endl;
cin>>lado; }
float CalculaArea()
{ area = lado*lado;
return area;}
float CalculaPerimetro()
{ perimetro = 4*lado;
return perimetro;}
~Quadrado() { cout << "\n\nDestroi quadrado" << endl; }
};
/*************/
int main(void) {
char op;
FormaGeometrica * p;
Circulo c1;
Retangulo r1;
Quadrado q1;
cout<< "*** PROGRAMA DE GEOMETRIA ****"<< endl;
cout<<"\n\nDigite qual sua forma geometrica desejada: "<< endl;
cout<<"\n(c) Circulo; \n(r) Retangulo; \n(q) Quadrado \n>> "<< endl;
cin>> op;
switch(op)
{ case '1':
case 'c':
case 'C': p = &c1;
break;
case '2':
case 'r':
case 'R': p=&r1;
break;
case '3':
case 'q':
case 'Q': p = &q1;
break;
default: cout<< "\nTipo invalido/inexistente!!"<<endl;
}
p->Entraparam();
cout<< "\nArea de saida: "<< p->CalculaArea() <<" [cm2]"<<endl;
cout<< "\nPerimetro de saida: "<< p->CalculaPerimetro() <<" [cm]" <<endl;
return 0;
}