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#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 originalvoid 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()]