[C con Clase] Sistema de eventos en C++. Callbacks

Davidson, Steven srd4121 en njit.edu
Vie Dic 27 22:19:41 CET 2013


Hola Miguel Ángel,

2013/12/27 Miguel Ángel Torres Fernández-Píñar <
miguelangeltorresfp en gmail.com>

> uf, Steven, muchísimas gracias por estos ejemplos y aclaraciones.
>
> El primer ejemplo me viene como anillo al dedo.
>
> 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.
>
>
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.

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,

class Estado
{
  ...
  virtual ~Estado();  // Al menos una función miembro virtual
};

class EstadoInicial : public Estado
{
  ...
};

class EstadoFinal : public Estado
{
  ...
};

class Estado1 : public Estado
{
  ...
};

class Estado2 : public Estado
{
  ...
};

Previamente, tenemos la clase 'GestorEstados':

class GestorEstados
{
protected:
  Estado *pLista[100];
  ...
};

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,

EstadoInicial ei;
EstadoFinal ef;
Estado1 e1;
Estado2 e2;

GestorEstados ge;

ge.AgregarEstado( &ei );
ge.AgregarEstado( &ef );
ge.AgregarEstado( &e1 );
ge.AgregarEstado( &e2 );

Internamente, 'ge' usará 'pLista' aunque contenga punteros a 'Estado',
mediante el polimorfismo.

Pero es GENIAL !!!! tener a profesores que te puedan ir resolviendo dudas
> conforme te vas encontrando con los problemas.
>
> Algún día espero poder entrar en un sitio a trabajar y tener alguien como
> tú de referencia.
>
> Un super saludo a tí y a todos los demás de la lista !!!.
>
>
Gracias; para eso estamos.


Espero que lo anterior te vaya orientando.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131227/d0303169/attachment.html>


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