Advertisement
davidcastrosalinas

20201103 Polimorfismo en C++

Nov 3rd, 2020
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <typeinfo>
  4.  
  5. using namespace std;
  6.  
  7. class Mascota {
  8. public:
  9.     Mascota() {
  10.         cout << "[constructor vacio]"<<endl;
  11.     };
  12.  
  13.     //destructor
  14.     virtual ~Mascota(){
  15.         cout <<"[destructor]"<<endl;
  16.     }
  17.  
  18.     Mascota(string n):nombre(n){
  19.     };
  20.  
  21.     virtual void ver(){
  22.         cout << "[MascotaPadre]"<<this->nombre<<endl;
  23.     }
  24.  
  25.     virtual void sonido(){ //virtual
  26.         cout <<"-----"<<endl;
  27.     }
  28.  
  29.     virtual void comer(){
  30.         cout <<"-----"<<endl;
  31.     }
  32.  
  33. protected:
  34.     string nombre;
  35. };
  36.  
  37. class Perro: public Mascota{
  38. public:
  39.     Perro(string n): Mascota(n) {
  40.     }
  41.  
  42.     virtual ~Perro(){
  43.         cout <<"[destructor de Perro]"<<endl;
  44.     }
  45.  
  46.     void ver(){
  47.         cout << "[Perro] ver: "<< this->nombre<<endl;
  48.     }
  49.  
  50.     void sonido(){ //virtual
  51.         cout <<"Ladrar"<<endl;
  52.     }
  53. };
  54.  
  55. class Gato: public Mascota{
  56. public:
  57.     Gato(string n): Mascota(n) {
  58.     }
  59.  
  60.     void ver(){
  61.         cout << "[Gato] ver: "<< this->nombre<<endl;
  62.     }
  63.  
  64.     void sonido(){ //virtual
  65.         cout <<"Maujar"<<endl;
  66.     }
  67. };
  68.  
  69. class Leon: public Mascota{
  70. public:
  71.     Leon() {}
  72.  
  73.     Leon(string n): Mascota(n) {
  74.     }
  75.  
  76.     void ver(){
  77.         cout << "[Leon] ver: "<< this->nombre<<endl;
  78.     }
  79.  
  80.     void sonido(){ //virtual
  81.         cout <<"Ruge"<<endl;
  82.     }
  83.  
  84.     void comer(){
  85.         cout <<"comer"<<endl;
  86.     }
  87. };
  88.  
  89. int main()
  90. {
  91.     /*Mascota m("Sin tipo");
  92.     m.sonido();*/
  93.  
  94.     Leon leon("Leoncio");
  95.     leon.ver();
  96.     leon.sonido();
  97.  
  98.     Gato gato("Dayen");
  99.     gato.ver();
  100.     gato.sonido();
  101.  
  102.     Perro perro("dock");
  103.     perro.ver();
  104.     perro.sonido();
  105.  
  106.     /**Polimorfismo:
  107.     sin VIRTUAL + memoria estática: se muestra el método de la clase BASE (Mascota)
  108.     con VIRTUAL + memoria estatica: se muestra el método de la clase BASE (Mascota)
  109.     sin VIRTUAL + memoria dinámica: se muestra el método de la clase BASE (Mascota)
  110.     con VIRTUAL + memoria dinámica: se ejecutará el método de la clase DERIVADA (Perro, Leon, Gato)
  111.     */
  112.     Mascota zooE[4];
  113.     zooE[0] = leon;
  114.     zooE[1] = gato;
  115.     zooE[2] = perro;
  116.     zooE[3] = Gato("Gonul");
  117.  
  118.     cout <<"**Mostrando zoologico estatico"<<endl;
  119.     for(int i=0; i<3; i++) {
  120.         zooE[i].ver();
  121.         zooE[i].sonido();
  122.     }
  123.     Leon * leoncito = new Leon("Yerko");
  124.     leoncito->ver();
  125.  
  126.     //parte dinámica
  127.     Mascota *zooD[4];
  128.     zooD[0] = new Leon();
  129.     zooD[1] = &gato;
  130.     zooD[2] = &perro;
  131.     zooD[3] = new Gato("Gonul");
  132.  
  133.     //ocuparemos la librería #include <typeinfo>
  134.     cout << "tipo de clase:" << typeid(Mascota).name()<<endl;
  135.     cout << "tipo de clase:" << typeid(Perro).name()<<endl;
  136.     cout << "tipo de clase:" << typeid(Leon).name()<<endl;
  137.     cout << "tipo de clase:" << typeid(Gato).name()<<endl;
  138.  
  139.     cout << "tipo de objeto0:" << typeid(*zooD[0]).name()<<endl;
  140.     cout << "tipo de objeto1:" << typeid(*zooD[1]).name()<<endl;
  141.     cout << "tipo de objeto2:" << typeid(*zooD[2]).name()<<endl;
  142.     cout << "tipo de objeto3:" << typeid(*zooD[3]).name()<<endl;
  143.  
  144.  
  145.     cout <<"**Mostrando zoologico dinamico"<<endl;
  146.     for(int i=0; i<4; i++) {
  147.         if(typeid(*zooD[i]).name() == typeid(Gato).name()){
  148.             cout <<"**este es un gran gato**"<<endl;
  149.         }
  150.         zooD[i]->ver();
  151.         zooD[i]->sonido();
  152.         zooD[i]->comer();
  153.     }
  154.  
  155.     return 0;
  156. }
  157.  
  158.  
  159.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement