Sobes.tech
Middle+

¿Qué es la herencia virtual?

sobes.tech AI

Respuesta de la IA

La herencia virtual es una forma de herencia en C++ que permite evitar problemas de "herencia en diamante" (diamond problem), cuando una misma clase base es heredada indirectamente por varias rutas. Con herencia virtual, la clase base común existirá en una sola instancia en el objeto de la clase final.

Ventajas:

  • Evitar la duplicación de datos y funciones de la clase base común.
  • Proporcionar una fuente única para acceder a los miembros de la clase base virtual.

Desventajas:

  • Complejiza la construcción de objetos y el acceso a las clases base virtuales (a través de punteros o desplazamientos "indirectos").
  • Disminución mínima del rendimiento al acceder a los miembros de la clase base virtual debido a la necesidad de resolver desplazamientos en tiempo de ejecución.
  • Restricciones en el uso de clases base virtuales en ciertos contextos (por ejemplo, en inicialización estática).

Se aplica al declarar una clase base usando la palabra clave virtual.

class Base {
public:
    int data;
};

class Derived1 : virtual public Base { // Herencia virtual
};

class Derived2 : virtual public Base { // Herencia virtual
};

class Final : public Derived1, public Derived2 { // Herencia en diamante
};

// En el objeto de la clase Final solo existirá una instancia de Base::data