Solução Exercício Polimorfismo: mudanças entre as edições
Ir para navegação
Ir para pesquisar
imported>Fargoud (Criou página com ' #include <iostream> using namespace std; →***********: class FormaGeometrica { public: float area; float perimetro; virtual void Entraparam()=0; //m...') |
imported>Fargoud Sem resumo de edição |
||
| (Uma revisão intermediária pelo mesmo usuário não está sendo mostrada) | |||
| Linha 1: | Linha 1: | ||
Versão mais simples: | |||
#include <iostream> | #include <iostream> | ||
using namespace std; | using namespace std; | ||
| Linha 67: | Linha 69: | ||
Retangulo r1; | Retangulo r1; | ||
Quadrado q1; | Quadrado q1; | ||
cout<< "*** PROGRAMA DE GEOMETRIA ****"<< endl; | cout<< "*** PROGRAMA DE GEOMETRIA ****"<< endl; | ||
cout<<"\n\nDigite qual sua forma geometrica desejada: "<< endl; | cout<<"\n\nDigite qual sua forma geometrica desejada: "<< endl; | ||
| Linha 93: | Linha 94: | ||
default: cout<< "\nTipo invalido/inexistente!!"<<endl; | 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; | return 0; | ||
} | } | ||
Edição atual tal como às 15h34min de 16 de maio de 2018
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;
}