O que é uma classe base virtual em C++ e por que ela é necessária na herança múltipla?
Olá a todos! Recentemente comecei a estudar C++ e me deparei com um problema ao usar herança múltipla. Tenho uma classe base `Animal`, da qual `Bird` e `Mammal` herdam. Então quero criar uma classe `Bat`, que herda de ambas — `Bird` e `Mammal`. Mas o compilador emite um erro de ambiguidade quando tento chamar o método `speak()`, definido em `Animal`. Aqui está um exemplo 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 {};
```
Ao tentar criar um objeto `Bat` e chamar `bat.speak()`, recebo um erro. Já ouvi falar sobre `virtual` para classes base, mas não entendo como isso funciona e qual é a diferença. Expliquem, por favor, o que é uma classe base virtual, quando deve ser usada e como ela resolve o problema do diamante (Diamond Problem)? Exemplos de código são bem-vindos.
<<>>