#include class A { public: virtual void Imprime(void); }; void A::Imprime(void) { cout << "Estoy en A" << endl; } class B: public A { public: void Imprime(void); }; void B::Imprime(void) { cout << "Estoy en B" << endl; } class C: public A { public: void Imprime(void); }; void C::Imprime(void) { cout << "Estoy en C" << endl; } class D: public A { public: void Imprime(void); }; void D::Imprime(void) { cout << "Estoy en D" << endl; } class DD: public D { public: virtual void Imprime(void); }; void DD::Imprime(void) { cout << "Estoy en DD" << endl; } // Prototipos: void Funcion1(void); void Funcion2(void); void MuestraObjeto(A *); void main(void) { Funcion1(); Funcion2(); } void Funcion1(void) { A *pa[5], *aux; cout<<"Ejecución de la función 1: "<Imprime(); } void Funcion2(void) { A Oa; B Ob; C Oc; D Od; DD Odd; cout<< endl <<"Ejecución de la función 2: "<< endl; MuestraObjeto(&Oa); MuestraObjeto(&Ob); MuestraObjeto(&Oc); MuestraObjeto(&Od); MuestraObjeto(&Odd); } void MuestraObjeto(A *O) { O->Imprime(); } /* Al ejecutar el programa se obtiene : Ejecución de la función 1: Estoy en A Estoy en B Estoy en C Estoy en D Estoy en DD Ejecución de la función 2: Estoy en A Estoy en B Estoy en C Estoy en D Estoy en DD */