Advertisement
fabgonber

Polimorfismo en C++

Nov 4th, 2020
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <typeinfo>
  3.  
  4. using namespace std;
  5.  
  6. class Figura
  7. {
  8.   public:
  9.     Figura()
  10.     {  }
  11.  
  12.     ~Figura()
  13.     {  }
  14.  
  15.     // VIRTUALES: uno por cada método que exista en las subclases
  16.     void virtual setLado(int a)
  17.     { }
  18.     void virtual setLado(int a, int b)
  19.     { }
  20.     void virtual ver()
  21.     { cout << "soy una figura" << endl; }
  22.  
  23.   protected:
  24.     // para este ejemplo no puse atributos
  25.  
  26.   private:  
  27.     // para este ejemplo no puse atributos
  28. };
  29.  
  30. class Rectangulo : public Figura
  31. {
  32.   public:
  33.     Rectangulo()
  34.     {  
  35.       this->largo = 0;
  36.       this->ancho = 0;
  37.     }
  38.     ~Rectangulo()
  39.     { this->ver(); }
  40.    
  41.     void ver()
  42.     { cout << "RECTANGULO: " << largo << ", " << ancho << endl; }
  43.  
  44.     void setLado(int a, int b)
  45.     { this->largo = a;
  46.       this->ancho = b;
  47.     }
  48.   private:
  49.     int largo;
  50.     int ancho;
  51. };
  52.  
  53. class Cuadrado : public Figura
  54. {
  55.   public:
  56.     Cuadrado()
  57.     {
  58.       this->lado = 0;
  59.     }
  60.    
  61.     ~Cuadrado()
  62.     { this->ver(); }
  63.    
  64.     void setLado(int a)
  65.     { this->lado = a; }
  66.    
  67.     void ver()
  68.     { cout << "CUADRADO: " << this->lado << endl; }
  69.  
  70.   private:
  71.     int lado;
  72. };
  73.  
  74. int main() {
  75.   std::cout << "Ejemplos de Polimorfismo!\n";
  76.   std::cout << "=========================\n";
  77.   Cuadrado azul;
  78.   Rectangulo verde;
  79.   Cuadrado amarillo;
  80.   int i, lado_1, lado_2, k=1;
  81.  
  82.   Figura * arreglo[3];
  83.   arreglo[0] = &azul;
  84.   arreglo[1] = &verde;
  85.   arreglo[2] = &amarillo;
  86.  
  87.   cout << endl ;
  88.   cout << "Cuadrado es de clase : " << typeid(Cuadrado).name() << endl;
  89.   cout << "azul es de clase : " << typeid(azul).name() << endl;
  90.   cout << "arreglo[0] es de clase : " << typeid(arreglo[0]).name() << endl;
  91.   cout << "*arreglo[0] es de clase : " << typeid(*arreglo[0]).name() << endl;
  92.   cout << endl ;
  93.  
  94.   for (i=0;i<3;i++)
  95.   {
  96.       if ( ( typeid(*arreglo[i]).name()) == ( typeid(Cuadrado).name()) )
  97.       {
  98.         cout << i << " es cuadrado entonces tiene solo un lado " << endl;
  99.         arreglo[i]->setLado(k++);
  100.       }    
  101.      
  102.       if ( ( typeid(*arreglo[i]).name()) == ( typeid(Rectangulo).name()) )
  103.       {
  104.         cout << i << " es rectangulo entonces tiene dos lados " << endl;
  105.         lado_1=k++;
  106.         lado_2=k++;
  107.         arreglo[i]->setLado(lado_1,lado_2);
  108.       }
  109.   }
  110.  
  111.   cout << endl ;
  112.   cout << "como esto se acaba, vienen los destructores" << endl ;
  113.  
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement