ExpertiDict

C++ · Avançado · Português · Técnico

herança virtual

eˈɾɐ̃sɐ viɾˈtwawsubstantivo

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 D

Exemplos

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

Veja também

Todos os termos de C++