SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: Mikan en Domingo 1 de Agosto de 2010, 16:12
-
A ver si me podeis ayudar por favor que creo que me he liado con la programación orientada a objetos.
Tengo una clase padre, tal que así:
class CPadre
{
void preHazCosas()
{
}
void HazCosas(); // Esta función no puede ser virtual pura.
}
// Clase Hijo 1
class CHijo1:: public CPadre
{
virtual void HazCosas1(){...}
}
// Clase Hijo 2
class CHijo2::public CHijo2
{
virtual void HazCosas2(){...}
}
Si me creo un objeto tipo Hijo1, y hago Hijo1.preHazCosas(), el código hace lo que espero:1
1. Llama la función preHazCosas del padre.
2. Llama a la función HazCosas del hijo1.
Perfecto! Justo lo que quiero es este comportamiento.
Ahora el problema... Si me creo un vector de elementos tipo padre:
Añado elementos así:
myVector.push_back( CHijo1() );
myVector.push_back( CHijo2() );
...
Pero ahora si hago:
myVector[1].preHazCosas();
Llama a la función preHazCosas del padre, y la función HazCosas del padre.
Como puedo hacer al recuperar el objeto del vector, que es un CHijo1? Supongo que es con un cast pero no veo como!
Gracias por avanzado!
-
Buenas
El problema es que no creas punteros.Prueba con:
vector<CPadre*> myVector;
myVector.push_back(new CHijo1() );
myVector.push_back(new CHijo2() );
myVector[1]->preHazCosas();
Saludos
-
Exacto, era tal y como dices!
Gracias, ahora ya me funciona bien.