Hola,
Cita:
Iniciado por haidion 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.