Sobes.tech
Middle+

O que é herança virtual?

sobes.tech IA

Resposta da IA

A herança virtual é uma forma de herança em C++ que permite evitar problemas de "herança em diamante" (diamond problem), quando uma mesma classe base é herdada indiretamente por várias rotas. Com herança virtual, a classe base comum existirá numa única instância no objeto da classe final.

Vantagens:

  • Evitar a duplicação de dados e funções da classe base comum.
  • Fornecer uma fonte única para aceder aos membros da classe base virtual.

Desvantagens:

  • Complica a construção de objetos e o acesso às classes base virtuais (através de ponteiros ou deslocamentos "indiretos").
  • Pequena redução de desempenho ao aceder aos membros da classe base virtual devido à necessidade de resolver deslocamentos em tempo de execução.
  • Restrições ao uso de classes base virtuais em certos contextos (por exemplo, na inicialização estática).

Aplica-se ao declarar uma classe base usando a palavra-chave virtual.

class Base {
public:
    int data;
};

class Derived1 : virtual public Base { // Herança virtual
};

class Derived2 : virtual public Base { // Herança virtual
};

class Final : public Derived1, public Derived2 { // Herança em diamante
};

// No objeto da classe Final, haverá apenas uma instância de Base::data