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
#include <Juego/acciones.cpp> #include <vector> int main () { accion a; a.ejecutor = "Pablo"; accion_dirigida b; b.ejecutor = "jose"; b.objetivo = "Carlitos"; vector <accion> acciones; acciones.push_back(a); acciones.push_back(b); acciones[0].ejecutar(); acciones[1].ejecutar(); wait(10); }
Acciones.h:
Código C:
Ver original
#include <string> class accion { public: std::string ejecutor; void ejecutar(); }; class accion_dirigida : public accion { public: std::string objetivo; void ejecutar(); };
Acciones.cpp:
Código c:
Ver original
void accion::ejecutar() { cout << accion::ejecutor << " Ha ejecutado una accion comun" << endl; return ; } void accion_dirigida::ejecutar() { 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()]