C++ · Avançado · Português · Técnico
herança virtual
Forma de herança, declarada com virtual, em que uma base compartilhada por vários caminhos aparece uma só vez no objeto final. Resolve a duplicação do problema do diamante.
Onde usar
Surge em herança múltipla quando B e C herdam de A e D herda de B e C. Sem virtual, D teria duas cópias de A e o acesso a seus membros seria ambíguo; com ela, o custo é um ponteiro extra e a inicialização feita pelo tipo mais derivado.
Em código
struct A { int x = 1; };
struct B : virtual A {};
struct C : virtual A {};
struct D : B, C {};
D d;
d.x = 2; // ok: só um A em DExemplos
Use herança virtual para evitar a duplicação da base no diamante.
Sem herança virtual, D tem duas cópias de A.
Cuidado
O construtor da base virtual é chamado pela classe mais derivada, e não pelas intermediárias, o que surpreende quem não conhece a regra.
Sinônimos
problema do diamante