• Miércoles 13 de Noviembre de 2024, 08:44

Autor Tema:  Duda de programación orientada a objetos  (Leído 1138 veces)

Mikan

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Duda de programación orientada a objetos
« en: Domingo 1 de Agosto de 2010, 16:12 »
0
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()
    {
      ...
      HazCosas();
    }
    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:
    vector<CPadre> myVector;
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!

Radger

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Duda de programación orientada a objetos
« Respuesta #1 en: Lunes 2 de Agosto de 2010, 11:23 »
0
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

Mikan

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Duda de programación orientada a objetos
« Respuesta #2 en: Lunes 2 de Agosto de 2010, 20:04 »
0
Exacto, era tal y como dices!
Gracias, ahora ya me funciona bien.