Union

Kaworu
02 de Marzo del 2005
Hola, tengo un problema, vereis, estoy con un programa que debe controlar máquinas, y los datos de estas se pueden obtener con dos tipos de tarjetas distintas, pero las llamadas a estas son practicamente las mimas, etc, aunque despues en cada una de las clases se trata de manera distinta los datos, etc. y solo se puede trabajar con una tarjeta cada vez que se ejecuta el programa.

Me gustaria poder tener un objeto que fuera tarjeta, y poder llamar a oTarjeta.iObtenerMedida (); por ejemplo y ya esta, sin necesidad de preocuparme de que tipo de tarjeta estoy usando. Habia pensado en usar un union, i inicializarlo en el constructor y ya esta, pero no recordaba muy bien como eran los union y no me sirve, pq sigo necesitando la resolución de alcance "." para entrar en un tipo o otro de tarjeta, y esto me obliga a mantener un variable con el tipo de tarjeta y comprobar antes de cada llamada que tipo de tarjeta estoy usando.

Alguien tiene alguna idea de como hacerlo? gracias!

chuidiang
02 de Marzo del 2005
Hola:

Puedes usar polimorfismo.

Hazte una clase con los metodos que necesites que sean virutales puros. Por ejemplo, el de ObtenerMedida(). Vamos a llamarla InterfaceTarjeta

Luego hazte dos clases hijas de esta, una para cada tarjeta. Cada una de ellas solo entiende su estructura de datos y su tarjeta. Llamalas Tarjeta1 y Tarjeta2. Ambas implementan los metodos de InterfaceTarjeta, pero solo con su propia estructura. Ambos tienen, por ejemplo, el ObjetenerMedida().

Luego, en tu programa, declara un puntero del tipo del interface

InterfaceTarjeta *unaTarjeta;

En algun sitios, haces new de la tarjeta concreta que se vaya a usar

unaTarjeta = new Tarjeta1();

Ahora, cuando llames a unaTarjeta->ObtenerDatos(), se llamara al metodo de Tarjeta1. El resto de tu codigo unicamente necesita el puntero a la interface.

Se bueno.

Kaworu
02 de Marzo del 2005
Pos va a ser ke si eh, me pasao por el forro una de las claves de la programacion POO, ke idiota soy cuando kiero yo tb, cuando pienso una idea y luego no me sirve ya me encabezono y no veo nada, merci y hasta luego!