Herança virtual é um mecanismo C++ para criar uma classe base que pode ser herdada com segurança várias vezes, sem causar problemas com o fatiamento de objetos ou erros de tempo de execução.
Considere o seguinte exemplo:
```c++
//Classe base
classe Animal {
público:
nome da sequência;
};
// Classe derivada 1
classe Cachorro:Animal público {
público:
raça de corda;
};
// Classe derivada 2
class Gato:Animal público {
público:
cor do barbante;
};
// Classe derivada 3 (herda de Dog e Cat)
class Animal de estimação:cachorro público, gato público {
público:
// ...
};
```
Sem herança virtual, a classe `Pet` herdaria duas cópias da classe base `Animal`, o que poderia levar a erros de tempo de execução ou fatiamento de objetos (onde apenas uma parte do objeto `Pet` é construída). Para evitar isso, podemos usar herança virtual especificando a palavra-chave `virtual` na declaração da classe base:
```c++
//Classe base com herança virtual
classe Animal {
público:
nome da sequência;
};
```
Ao usar herança virtual, a classe `Pet` herdará apenas uma cópia da classe base `Animal`, garantindo o comportamento correto e evitando erros de execução.
Benefícios: 1.
Resolvendo ambigüidades: Ajuda a resolver ambiguidades quando várias classes base têm a mesma função de membro ou membro de dados.
2.
Sobrecarga de memória reduzida: Evita o fatiamento de objetos, reduzindo a sobrecarga de memória e melhorando o desempenho.
3.
Flexibilidade: Permite hierarquias de herança complexas onde classes derivadas podem herdar de múltiplas classes base.
Quando usar herança virtual: - Quando você tem herança múltipla e deseja evitar membros de base ambíguos ou fatiamento de objetos.
- Quando você deseja compartilhar funcionalidades comuns entre várias classes derivadas sem duplicar o código.