¿Qué es una clase base virtual en C++ y por qué se necesita en la herencia múltiple?
¡Hola a todos! Recientemente comencé a estudiar C++ y me encontré con un problema al usar herencia múltiple. Tengo una clase base `Animal`, de la que heredan `Bird` y `Mammal`. Luego quiero crear una clase `Bat`, que hereda de ambas — `Bird` y `Mammal`. Pero el compilador da un error de ambigüedad cuando intento llamar al método `speak()`, definido en `Animal`. Aquí hay un ejemplo de código:
```cpp
class Animal {
public:
void speak() { cout << "Animal sound\n"; }
};
class Bird : public Animal {};
class Mammal : public Animal {};
class Bat : public Bird, Mammal {};
```
Al intentar crear un objeto `Bat` y llamar a `bat.speak()`, obtengo un error. He oído sobre `virtual` para clases base, pero no entiendo cómo funciona y cuál es la diferencia. Expliquen, por favor, qué es una clase base virtual, cuándo se debe usar y cómo resuelve el problema de la herencia en diamante (Diamond Problem). Los ejemplos de código son bienvenidos.