Union
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!
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!
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.
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.
