Código
class ClaseA
{
public:
virtual void funcion () {};
};
class ClaseB : public ClaseA
{
void funcion () {};
};
int main ()
{
ClaseA *objeto = new ClaseB;
}
Hemos creado un objeto de tipo "ClaseA" pero hemos reservado memoria del tamaño "ClaseB". Y al declarar "funcion" como virtual, cada vez que la llamemos estaremos accediendo a la que hay en la clase que hereda y no a la de la clase base. Pero, ¿de qué nos sirve exactamente esto?. ¿No sería lo mismo que declarar el objeto de tipo ClaseB y sobrecargar la función sin añadir "virtual"?:
Código
class ClaseA
{
public:
void funcion () {};
};
class ClaseB : public ClaseA
{
void funcion () {};
};
int main ()
{
ClaseB *objeto = new ClaseB; //Hemos sobrecargado "funcion" asi que se llamará a la de la clase que hereda
}
Y luego también he leído ejemplos en los que hace lo siguiente:
Código
class ClaseA
{
public:
virtual void funcion () {};
};
class ClaseB : public ClaseA
{
void funcion () {};
};
int main ()
{
ClaseB *objeto = new ClaseB;
}
Es decir, declaramos un objeto de tipo "ClaseB" y reservamos memoria también "ClaseB", sin embargo usa la función "virtual" en la clase base. ¿Por qué?, ¿para qué añadir "virtual" si sin ella automáticamente se sobrecarga la función y se llama a la de la clase que hereda (como en el ejemplo anterior)?.
Gracias y saludos.


 
  




 Autor
 Autor
		


 En línea
									En línea
								




