[C con Clase] Listas,herencia y polimorfismo

Davidson, Steven srd4121 en njit.edu
Mar Dic 24 20:28:13 CET 2013


Hola Pablo,

Ante todo, bienvenido a la lista.

2013/12/24 Pablo Lobato <zeus12001200 en gmail.com>

> Tengo un pequeño problema. Tenía entendido que al declarar en una clase
> padre una función virtual, al llamar a esa función se llamaba a la función
> hija si era declarada de este modo:
>
> ClasePadre *Hijo= new ClaseHijo();
>
> Mi problema viene que al crear una std::list <ClasePadre> y meter
> diferentes hijos, no consigo que la llamada a la función se realice sobre
> la función de la clase hija, si no que siempre me hace la del padre a pesar
> de estar declarada virtual.
>
> Como podría hacer que la llamada se realizase a la función hija?
>

El problema es que necesitas manipular los objetos polimórficos a través de
un puntero o con una referencia. Como has creado una lista de valores de
tipo 'ClasePadre', se invocarán sus funciones miembro al tratar los objetos
de tipo 'ClasePadre'.

La solución es crear una lista de objetos polimórficos. Por ejemplo,

std::list< ClasePadre * > lista;

o si lo prefieres,

std::list< ClasePadre & > lista;

Personalmente, prefiero usar punteros, porque ofrecen mayor flexibilidad,
ya que puedes asignar un puntero nulo, mientras que con referencias, no
puedes.


Espero que esto aclare la duda.

Steven

P.D.: Feliz Nochebuena y Navidad.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131224/10a4fbf2/attachment.html>


Más información sobre la lista de distribución Cconclase