Polimorfismo 02 - Funciones Virtuales

Una función virtual es un member function de una clase base que se espera será redefinida por sus clases derivadas.

Digamos que B es una clase base y D una clase derivada. Si la clase B tiene una función virtual llamada ayuda() se espera que la clase D redefina esa función. Si creamos un puntero a clase B llamado pb y hacemos que apunte a un objeto de clase D, cuando invocamos pb->ayuda() estaremos invocando la función ayuda() de la clase D. El ejecutable dinamicamente verifica el tipo del objeto apuntado para saber cuál versión de la función ayuda() debe invocar.

Vídeo

Estudia el siguiente video para que conozcas más sobre las funciones virtuales en C++.

Analiza lo siguiente

A continuación un programa parecido al del vídeo.

  1. Explica por qué el output es:

    Generic Enemy attack!!!!
    Generic Enemy attack!!!!
    Ninja attack!!!!
    Monster attack !!!!
    
  2. ¿Cómo lograrías que las instrucciones enemy1->attack(); y enemy2->attack(); invocaran a las funciones atack() de las clases Ninja y Monster (sin modificar nada en main).