<div dir="ltr">Hola Pablo,<div class="gmail_extra"><br></div><div class="gmail_extra">Ante todo, bienvenido a la lista.</div><div class="gmail_extra"><br><div class="gmail_quote">2013/12/24 Pablo Lobato <span dir="ltr"><<a href="mailto:zeus12001200@gmail.com" target="_blank">zeus12001200@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><span style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)">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:</span><br style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)">

<br style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)"><span style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)">ClasePadre *Hijo= new ClaseHijo();</span><br style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)">

<br style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)"><span style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)">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. </span><br style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)">

<br style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)"><span style="color:rgb(26,26,26);font-family:'Lucida Sans Unicode','Lucida Sans','Lucida Grande',Malayalam,Verdana,sans-serif;font-size:13px;background-color:rgb(253,253,253)">Como podría hacer que la llamada se realizase a la función hija?</span></div>
</blockquote><div><br></div><div>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'.</div>
<div><br></div><div>La solución es crear una lista de objetos polimórficos. Por ejemplo,</div><div><br></div><div>std::list< ClasePadre * > lista;</div><div><br></div><div>o si lo prefieres,</div><div><br></div><div>
<div>std::list< ClasePadre & > lista;</div></div><div><br></div><div>Personalmente, prefiero usar punteros, porque ofrecen mayor flexibilidad, ya que puedes asignar un puntero nulo, mientras que con referencias, no puedes.</div>
<div><br></div><div><br></div><div>Espero que esto aclare la duda.</div><div><br></div><div>Steven</div><div><br></div><div>P.D.: Feliz Nochebuena y Navidad.</div></div></div></div>