Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/07/2011, 23:40
Avatar de sbcl
sbcl
 
Fecha de Ingreso: julio-2011
Mensajes: 29
Antigüedad: 12 años, 9 meses
Puntos: 5
Method overriding, Herencia y Vector.

Buenas, venia a molestar con otra duda!
La cosa es asi:
Yo tengo 2 clases, Accion y Accion_dirigida(la Cual hereda, o deriva de Accion).
Yo necesito tener un vector que almacene punteros o instancias de Accion (Lo cual por logica, tambien debería admitir instancias o punteros de Accion Dirigida, por la herencia).

Esto es lo que tengo de Código:

Prueba.Cpp:
Código c:
Ver original
  1. #include <Juego/acciones.cpp>
  2. #include <vector>
  3. int main ()
  4. {
  5.     accion a;
  6.     a.ejecutor = "Pablo";
  7.     accion_dirigida b;
  8.     b.ejecutor = "jose";
  9.     b.objetivo = "Carlitos";
  10.     vector <accion> acciones;
  11.     acciones.push_back(a);
  12.     acciones.push_back(b);
  13.     acciones[0].ejecutar();
  14.     acciones[1].ejecutar();
  15.     wait(10);
  16. }

Acciones.h:

Código C:
Ver original
  1. #include <string>
  2. class accion
  3. {
  4.       public:
  5.       std::string ejecutor;
  6.       void ejecutar();
  7. };
  8.  
  9. class accion_dirigida : public accion
  10. {
  11.       public:
  12.       std::string objetivo;
  13.       void ejecutar();
  14. };

Acciones.cpp:

Código c:
Ver original
  1. void accion::ejecutar()
  2. {
  3.   cout << accion::ejecutor << " Ha ejecutado una accion comun" << endl;
  4.   return ;
  5. }
  6.  
  7. void accion_dirigida::ejecutar()
  8. { cout << accion_dirigida::ejecutor << " Ha ejecutado una accion dirigida a " << accion_dirigida::objetivo << endl; }


El problema, es que al almacenar una instancia de Accion_Dirigida, Ocurre un "Slicing", que causa que solo se almacene la parte de Accion de la Accion_dirigida, asi llamando al metodo Ejecutar() llama al metodo de Accion.


Lo que necesito seria una solucion a esto, estuve leyendo un buen rato y lo unico que encontre fue usar shared_Ptr´s , pero tampoco me funciono.

Agradeceria Muchisimo si alguno pudiera aportarme una solucion a mi problema.
Si no deje algo claro, pregunten con tranquilidad!

Muchas Gracias!

EDIT: Me olvide, el output de Prueba.cpp es:

"Jorge Ha Ejecutado una Accion Comun"
"Josesito Ha ejecutado una Accion Comun"

[en resumen, los outputs del Accion::ejecutar()]