seria posible codificar en c++ este ejemplo

K600
17 de Febrero del 2004
siendo "ClaseHija" derivada de "ClaseMadre"?:
ClaseHija objetoH;
ClaseMadre objetoM=objetoH;
¿Que pasaria si se quisiera, usando 'ObjetoM, llamar a un metodo declarado en las dos clases (por ejemplo objetoM.metodo())? ¿y si 'objetoM fuera una referencia o un puntero?

dvaccaro
17 de Febrero del 2004
K600

Interesante el planteo, a priori la respuesta es que
el metodo que se ejecuta es el de la clase instanciada
es decir el de la ClaseMadre, mas allá que en la
inicializacion de la misma hallas usado una instancia
de la ClaseHija ( objetoH ) puesto que los metodos
no se asignan en el proceso de inicialización de la
clase.

Otra situación es la siguiente:

#include <stdio.h>
#include <conio.h>

class madre
{
public:
madre(){;};
virtual void test( void ){ printf("nMadren");};
};

class hija:public madre
{
public:
hija(){;};
void test( void ){ printf("nHijan");};
};

void main( void )
{
madre *Madre;
hija Hija;
Madre = &Hija;
Madre->test();
getch();
}

Como aqui utilizamos un puntero la situacion
es diferente, ( si el metodo en cuestion se declara
virtual ) se produce lo que se llama late-binding es
decir que en tiempo de ejecución se crea en una
lista oculta la direccion de llamada al metodo que
corresponda, es decir como la clase de la que el
puntero Madre toma su direccion es de clase hija
por mas que el puntero sea de clase madre, se
llamará el metodo de la clase hija.
Este mecanismo esta ampliamente difundido y
es la base en C++ para implementar el conocido
polimorfismo del OOP.

Saludos
Daniel