<div dir="ltr">Hola Miguel Ángel,<div class="gmail_extra"><br><div class="gmail_quote">2013/12/27 Miguel Ángel Torres Fernández-Píñar <span dir="ltr"><<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@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"><div><div><div><div><div>uf, Steven, muchísimas gracias por estos ejemplos y aclaraciones.<br>
<br></div>El primer ejemplo me viene como anillo al dedo.<br><br></div>El segundo no lo entiendo del todo. Realmente sé más o menos lo que es el polimorfismo, pero aun no he conseguido llegar al paso en el que integre eso en mis programas. Poco a poco.<br>

<br></div></div></div></div></blockquote><div><br></div><div>En primer lugar, no hay gran diferencia entre el primer ejemplo y el segundo. El matiz importante es que en el segundo ejemplo la clase 'Estado' no tiene el puntero al gestor como miembro. Por consiguiente, algunas funciones miembro, que requieren el gestor, lo aceptan como un puntero al objeto pasado por parámetro.</div>
<div><br>En cuanto al uso de polimorfismo, te puedo decir que te ha llegado la hora de usarlo, especialmente en este caso. Cada estado que quieras crear será un objeto de diferente clase que se base en la clase pariente, 'Estado'. El gestor mantendrá una lista de estados, por lo que contendrá una lista de objetos de cualquier tipo con tal de que su pariente común sea 'Estado'. Por ejemplo,</div>
<div><br></div><div>class Estado<br>{<br>  ...</div><div>  virtual ~Estado();  // Al menos una función miembro virtual<br>};</div><div><br></div><div>class EstadoInicial : public Estado<br>{<br>  ...<br>};</div><div><br></div>
<div><div>class EstadoFinal : public Estado<br>{<br>  ...<br>};</div></div><div><br></div><div><div>class Estado1 : public Estado<br>{<br>  ...<br>};</div></div><div><br></div><div><div>class Estado2 : public Estado<br>{<br>
  ...<br>};</div></div><div><br></div><div>Previamente, tenemos la clase 'GestorEstados':<br><br>class GestorEstados<br>{<br>protected:<br>  Estado *pLista[100];</div><div>  ...</div><div>};</div><div><br></div><div>
Puedes usar un contenedor para representar la lista de 'Estado', pero con tal de que sean punteros a 'Estado', podemos tratarlos como objetos polimórficos. Por ejemplo,</div><div><br></div><div>EstadoInicial ei;</div>
<div>EstadoFinal ef;</div><div>Estado1 e1;</div><div>Estado2 e2;</div><div><br></div><div>GestorEstados ge;</div><div><br></div><div>ge.AgregarEstado( &ei );</div><div><div>ge.AgregarEstado( &ef );</div></div><div>
<div>ge.AgregarEstado( &e1 );</div></div><div><div>ge.AgregarEstado( &e2 );</div></div><div><br></div><div>Internamente, 'ge' usará 'pLista' aunque contenga punteros a 'Estado', mediante el polimorfismo.</div>
<div><br></div><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"><div><div><div></div>Pero es GENIAL !!!! tener a profesores que te puedan ir resolviendo dudas conforme te vas encontrando con los problemas.<br>
<br></div>Algún día espero poder entrar en un sitio a trabajar y tener alguien como tú de referencia.<br>
<br></div>Un super saludo a tí y a todos los demás de la lista !!!.<br></div><div class="gmail_extra"><div class="gmail_quote"><br></div></div></blockquote><div><br></div><div>Gracias; para eso estamos.</div><div><br></div>
<div><br></div><div>Espero que lo anterior te vaya orientando.</div><div><br></div><div>Steven</div><div><br></div></div></div></div>