Entrar
¿Usuario nuevo? Regístrate
war_3d · War 3D
? ¿Ya estás suscrito? Entrar en Yahoo!

Consejos de Yahoo! Grupos

¿Sabías que...?
Puedes buscar mensajes antiguos en un grupo.

Mensajes

  Mensajes Ayuda
Avanzado
Dale update al CVC, sonidos y modelos.   Lista de mensajes  
Responder | Reenviar Mensaje #113 de 894 |
RE: [war_3d] RE: Dale update al CVC, sonidos y modelos.

Ok, creo que entiendo. Tienes razon.
 
El problema es que tengo un <vector> en donde he guardado varios objetos, todos derivan de oSoldados, por tanto el vector que estoy usando fue declarado asi.
 
vector<oSoldado> TodosLosSoldados;
 
Y meto nuevos soldados con:
 
TodosLosSoldados.insert(Soldados.begin(), SoldadoNuevo);
 
Donde SoldadoNuevo es cualquier objeto de los que derivan de oSoldado. Hasta ahi todo bien. Es correcto y funciona.
 
----
 
Pero cuando quiero iterar sobre los objetos contenidos en Soldados, llamando para cada uno su metodo animacion(); Lo hago asi.
 
oSoldados *Ite;
for (Ite=TodosLosSoldados->begin(); Ite != TodosLosSoldados->end(); ++Ite)
    {
        Ite->animacion();
    }
 
Pero... esto hace que se ejecute el metodo oSoldado::animacion en lugar de HeredadoDeOSoldado::animacion(), por lo que me comentas de los punteros es correcto que suceda asi ya que Ite es un puntero tipo oSoldado.

Parece ser que tendriaque hacer  un casting , algo asi como..
 
oSoldados *Ite;
for (Ite=TodosLosSoldados->begin(); Ite != TodosLosSoldados->end(); ++Ite)
    {   
        Switch(Ite->tipo)
        {
            case(1): (HeredadoDeOSoldado_1 *) Ite->animacion(); Break;
            case(2): (HeredadoDeOSoldado_2 *) Ite->animacion(); Break;
            case(3): (HeredadoDeOSoldado_3 *) Ite->animacion(); Break;
        }
 
    }
 
Donde Ite->tipo Almacena el tipo de Soldado que es cada uno.
 
Pero tiene la enorme desventaja de que al añadir un nuevo objeto que hereda de oSoldado tendria que agregar un nuevo case.
 
¿ Se te ocurre algo mas elegante. ?? A mi no, por el momento :(
 
Saludos dr_Picu
 
ZeruGiran
 
___________________

-----Mensaje original-----
De: David Díaz [mailto:dr_picu2@...]
Enviado el: Jueves, 05 de Diciembre de 2002 03:18 a.m.
Para: war_3d@yahoogroups.com
Asunto: [war_3d] RE: Dale update al CVC, sonidos y modelos.


>Hice varios objetos que heredan de oSoldado, y
>por ejemplo, la funcion animacion() es diferente
>para cada unos de los objetosque derivan(o heredan)
>de oSoldado, pero al compilarlo al parecer se ejecuta
>la funcion animacion() de el objeto base (oSoldado) en
>lugar de ejecutar la funcion animacion de cada uno de
>los objetos hijos.

Hola: aún no he visto el código fuente ya que ahora mismo
estoy en el trabajo. A ver si te puedo dar alguna pista.

Si tienes una clase base llamada oSoldado y una clase oSoldadoInfanteria que deriva de oSoldado, entonces:

------8<------------8<------------8<------------8<------
oSoldadoInfanteria *objeto;

oSoldado *soldado1;
oSoldadoInfanteria *soldado2;

objeto = new oSoldado;

soldado1 = objeto;
soldado2 = objeto;

// Esto llamará a  oSoldado::animacion()
soldado1->animacion();

// Esto llamará a  oSoldadoInfanteria::animacion()
soldado2->animacion();
------8<------------8<------------8<------------8<------

¿ Entiendes ? El método invocado depende del tipo de
puntero. Como ves en el ejemplo, el objeto
es el mismo, pero accedemos a él a través de 2 punteros
de tipo diferente (oSoldado y oSoldadoInfanteria).


Si quieres responder a este mensaje deberas hacerlo a la siguiente direccion: war_3d@yahoogroups.com

_____________________________________

Pagina principal: http://war3d.sourceforge.net/

Mensajes anteriores: http://es.groups.yahoo.com/group/war_3d/messages

Para cancelar su suscripción war_3d-unsubscribe@yahoogroups.com



La utilización de Yahoo! Grupos está sujeta a su aceptación de las
Condiciones del servicio (http://es.docs.yahoo.com/info/utos.html) así
como de la Política de privacidad (http://privacy.yahoo.com/es/).





Jue, 5 de Dic, 2002 10:35 pm

zerugiran@...
Enviar mensaje Enviar mensaje

Reenviar Mensaje #113 de 894 |
Desplegar mensajes Autor Ordenar por fecha

He modificado algunas cosas. La mayoria son estructurales, he intentado crear un objeto separado para cada una de las diferentes unidades. Pero al parecer no...
Zeru Giran
zerugiran@...
Enviar mensaje
5 de Dic, 2002
6:57 am

... Hola: aún no he visto el código fuente ya que ahora mismo estoy en el trabajo. A ver si te puedo dar alguna pista. Si tienes una clase base llamada...
David Díaz
dr_picu2
Sin conexión Enviar mensaje
5 de Dic, 2002
10:18 am

Ok, creo que entiendo. Tienes razon. El problema es que tengo un <vector> en donde he guardado varios objetos, todos derivan de oSoldados, por tanto el vector...
Zeru Giran
zerugiran@...
Enviar mensaje
5 de Dic, 2002
9:31 pm

Hola de nuevo: Re hola, acabo de leer el mail de Javier: Valla, no sabia por que no me dejaba crear un Vector a partir de una clase abstracta, jeje. Guano...
Zeru Giran
zerugiran@...
Enviar mensaje
5 de Dic, 2002
10:02 pm

Como no Zeru, tratare de explicarme aunque no estoy mu ducho en la materia. Cuando un crea un vector con STL normalmente hacemos: vector<int> V; ...
marginalito
Sin conexión Enviar mensaje
6 de Dic, 2002
6:36 am

Zeru: Como estas?. Espero que bien. Este es mi primer post en la lista, y queria aprovechar para dar mi granito de arena sobre el problema de C++ Zeru, no...
Javier Munoz
marginalito
Sin conexión Enviar mensaje
5 de Dic, 2002
5:13 pm

... Hmmm, sí... faltó :) El caso es que en el trabajo no podía hacer pruebas y todo eso lo tengo un poco olvidado. Tu explicación es magistral ;) ... ...
David Díaz
dr_picu2
Sin conexión Enviar mensaje
6 de Dic, 2002
12:06 am

David y Zerugiran: Ciertamente si crean un vector con punteros en vez de objetos tendran que hacer la creacion y limpieza explicitamente (de otro modo como STL...
Javier Munoz
marginalito
Sin conexión Enviar mensaje
6 de Dic, 2002
6:15 am
Avanzado

Copyright © 2009 Yahoo! Todos los derechos reservados.
Política de Privacidad Actualizada - Condiciones del servicio - Directrices - Ayuda