Solução Exercício Polimorfismo: mudanças entre as edições

De IFSC
Ir para navegação Ir para pesquisar
imported>Fargoud
Sem resumo de edição
imported>Fargoud
Sem resumo de edição
 
Linha 1: Linha 1:
Versão mais simples:
  #include <iostream>
  #include <iostream>
  using namespace std;
  using namespace std;
Linha 92: 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;
}