Zeru:
Como estas?. Espero que bien.
Este es mi primer post en la lista, y queria aprovechar para dar mi
granito de arena sobre el problema de C++
Zeru, no puedes crear arreglos ni vectores de objetos Abstractos porque
la implementacion de vectores de STL trata de crear los objetos usando como
template la clase oSoldado, que es abstracta y por lo tanto carece de
implementacion. (en algun o en todos los metodos)
Tienes 2 opciones a mi parecer, la primera es crear un vector de
*punteros* a objetos oSoldado (o sus derivados) y la otra es asignar un
constructor diferente cuando inicializes el vector (usando el ultimo
parametro del metodo y no... nunca lo he hecho)
En cuanto a al overriding de funciones falto un punto muy importante
David.
El caso que mostraste con tu ejemplo es valido solo si las funciones
*NO* son declaradas como virtuales en tus clases. En caso contrario:
<CODIGO>
<Soldado.h>
...
class oSoldado
{
//Miembros privados, constructores, etc.
....
//Metodos
virtual void animacion() { cout << "oSoldado::animacion()\n"; }
};
class oSoldadoInfanteria : public oSoldado
{
//Miembros privados, constructores, etc.
....
//Metodos
virtual void animacion() { cout <<
"oSoldadoInfanteria::animacion()\n"; }
};
...
<main.cxx>
...
oSoldadoInfanteria *objeto;
oSoldado *soldado1;
oSoldadoInfanteria *soldado2;
//objeto = new oSoldado;
objeto = new oSoldadoInfanteria ; // <--- si no vamos a crear el objeto
derivado entonces no vale la pena el experimento
soldado1 = objeto;
soldado2 = objeto;
// Esto llamará a oSoldadoInfanteria::animacion()
soldado1->animacion();
// Esto tambien llamará a oSoldadoInfanteria::animacion()
soldado2->animacion();
...
</CODIGO>
Precisamente esa es la funcion de la palabra clave "virtual". Espero
esta aclaracion ayude, y saludos a la lista. :)
PD: Se aceptan cordialmente criticas y comentarios.