Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <typeinfo>
- using namespace std;
- class Figura
- {
- public:
- Figura()
- { }
- ~Figura()
- { }
- // VIRTUALES: uno por cada método que exista en las subclases
- void virtual setLado(int a)
- { }
- void virtual setLado(int a, int b)
- { }
- void virtual ver()
- { cout << "soy una figura" << endl; }
- protected:
- // para este ejemplo no puse atributos
- private:
- // para este ejemplo no puse atributos
- };
- class Rectangulo : public Figura
- {
- public:
- Rectangulo()
- {
- this->largo = 0;
- this->ancho = 0;
- }
- ~Rectangulo()
- { this->ver(); }
- void ver()
- { cout << "RECTANGULO: " << largo << ", " << ancho << endl; }
- void setLado(int a, int b)
- { this->largo = a;
- this->ancho = b;
- }
- private:
- int largo;
- int ancho;
- };
- class Cuadrado : public Figura
- {
- public:
- Cuadrado()
- {
- this->lado = 0;
- }
- ~Cuadrado()
- { this->ver(); }
- void setLado(int a)
- { this->lado = a; }
- void ver()
- { cout << "CUADRADO: " << this->lado << endl; }
- private:
- int lado;
- };
- int main() {
- std::cout << "Ejemplos de Polimorfismo!\n";
- std::cout << "=========================\n";
- Cuadrado azul;
- Rectangulo verde;
- Cuadrado amarillo;
- int i, lado_1, lado_2, k=1;
- Figura * arreglo[3];
- arreglo[0] = &azul;
- arreglo[1] = &verde;
- arreglo[2] = &amarillo;
- cout << endl ;
- cout << "Cuadrado es de clase : " << typeid(Cuadrado).name() << endl;
- cout << "azul es de clase : " << typeid(azul).name() << endl;
- cout << "arreglo[0] es de clase : " << typeid(arreglo[0]).name() << endl;
- cout << "*arreglo[0] es de clase : " << typeid(*arreglo[0]).name() << endl;
- cout << endl ;
- for (i=0;i<3;i++)
- {
- if ( ( typeid(*arreglo[i]).name()) == ( typeid(Cuadrado).name()) )
- {
- cout << i << " es cuadrado entonces tiene solo un lado " << endl;
- arreglo[i]->setLado(k++);
- }
- if ( ( typeid(*arreglo[i]).name()) == ( typeid(Rectangulo).name()) )
- {
- cout << i << " es rectangulo entonces tiene dos lados " << endl;
- lado_1=k++;
- lado_2=k++;
- arreglo[i]->setLado(lado_1,lado_2);
- }
- }
- cout << endl ;
- cout << "como esto se acaba, vienen los destructores" << endl ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement