Tema: Herencia
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/09/2009, 09:24
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 17 años, 1 mes
Puntos: 3
Respuesta: Herencia

Hola,

Cita:
Iniciado por haidion Ver Mensaje
Creo que tenes que declar a la funcion como virtual.
En googel hay un monton de informacion.
No, eso no cambia nada.

Hay algo que hay que entender en el principio de herencia, es que la herencia va siempre en sentido único: el hijo conoce al padre, pero el padre no conoce al hijo (es por eso que en UML, la flecha de herencia va del hijo hasta el padre). Por ejemplo el codigo siguiente:
Código:
struct Padre //suelo usar struct en vez de class para evitar declarar todo en publico, pero es exactamente igual
{
   Padre(){f();}
   virtual void f() = 0;
};

struct Hijo : public Padre
{
   f() { std::cout << "Hijo::f() llamada" << std::endl; }
};
ni siquiera compila, porque como el padre no se nada del hijo, ni siquiera se que esta función f() existe (solo se que esta función debe existir, pero nada mas).

Este problema se puede arreglar de varias maneras. Las que conozco son:
. el patron de diseño factory (hacer una clase externa que se encarga de construir el Hijo.
. poner la función en el constructor del hijo

Seguro que hay mas maneras de hacer, pero como yo siempre uso una factory (este patrono arregla este problema y varios otros), no conozco otras.