Duda con programacion orientada a objetos (C++)

Antes de nada, juraría que había un subforo de programación, pero no lo encuentro xD

Bueno tengo una duda con las clases abstractas. Imaginaos que tengo:

Class ClaseAbstracta
{
   ClaseAbstracta();
   ~ClaseAbstracta();

   virtual void metodoAbs1();
   virtual void metodoAbs2();
}

Class ClaseDerivada1: public ClaseAbstracta
{
   ClaseDerivada1();
   ~ClaseDerivada1();

   void metodoAbs1();
   void metodoAbs2();

   bool metodoExtra1();
}

Class ClaseDerivada2: public ClaseAbstracta
{
   ClaseDerivada2();
   ~ClaseDerivada2();

   void metodoAbs1();
   void metodoAbs2();

   int metodoExtra2();
}



Si instancio Clase abstracta como derivada 1 osea:

ClaseAbstracta *abs = new ClaseDerivada1();

no debería poder acceder a los metodos extra desde "abs"? El compilador me dice que no xD así que algo estaré haciendo mal.

Gracias y Salu2
No, sólo puedes acceder a los métodos de la clase abstracta, son los únicos que estás obligado a implementar.
Vale, entonces que sentido tiene crear metodos extra? Tendria que instanciar un objeto del tipo ClaseDerivada1 para poder usarlos?

Gracias.

Salu2
Dadrimoon escribió:entonces que sentido tiene crear metodos extra?

Es lo que tiene el polimorfismo, a veces es útil, otras no, pero sentido sí tiene.

Por ejemplo, puedes usar el mismo objeto en 2 tipos de listas distintas, en una lista de la clase heredada puede estar mezclado con otros objetos derivados que tengan que realizar las mismas funciones (las heredadas) y en otra lista puede estar sólo con objetos de su clase que tengan que realizar tareas concretas. Por ejemplo, en juegos sencillos es bastante útil para dibujar y actualizar sprites de distintos tipos (enemigos, personaje, disparos, efectos especiales, etc).

Dadrimoon escribió:Tendria que instanciar un objeto del tipo ClaseDerivada1 para poder usarlos?

Sí, o usar un "casting", lo explican aquí: http://www.cplusplus.com/doc/tutorial/typecasting/
amuchamu escribió:
Dadrimoon escribió:entonces que sentido tiene crear metodos extra?

Es lo que tiene el polimorfismo, a veces es útil, otras no, pero sentido sí tiene.

Por ejemplo, puedes usar el mismo objeto en 2 tipos de listas distintas, en una lista de la clase heredada puede estar mezclado con otros objetos derivados que tengan que realizar las mismas funciones (las heredadas) y en otra lista puede estar sólo con objetos de su clase que tengan que realizar tareas concretas. Por ejemplo, en juegos sencillos es bastante útil para dibujar y actualizar sprites de distintos tipos (enemigos, personaje, disparos, efectos especiales, etc).

Dadrimoon escribió:Tendria que instanciar un objeto del tipo ClaseDerivada1 para poder usarlos?

Sí, o usar un "casting", lo explican aquí: http://www.cplusplus.com/doc/tutorial/typecasting/


Ok! ya tengo las ideas un poco mas claras, gracias!

Salu2
4 respuestas