Sobes.tech
Middle+

Wat is virtueel erfgoed?

sobes.tech AI

Antwoord van AI

Virtuele erfenis is een vorm van erfenis in C++ die het vermijden van problemen met "diamantprobleem" (diamond problem) mogelijk maakt, wanneer dezelfde basisklasse indirect wordt geërfd via meerdere paden. Bij virtuele erfenis bestaat de gemeenschappelijke basisklasse in één exemplaar in het object van de uiteindelijke klasse.

Voordelen:

  • Voorkomt duplicatie van gegevens en functies van de gemeenschappelijke basisklasse.
  • Biedt een enkele bron om toegang te krijgen tot de leden van de virtuele basisklasse.

Nadelen:

  • Maakt de constructie van objecten en toegang tot virtuele basisklassen complexer (via "indirecte" pointers of verschuivingen).
  • Kleine prestatievermindering bij toegang tot leden van de virtuele basisklasse vanwege de noodzaak om verschuivingen tijdens runtime op te lossen.
  • Beperkingen bij het gebruik van virtuele basisklassen in bepaalde contexten (bijvoorbeeld bij statische initialisatie).

Wordt toegepast bij het declareren van een basisklasse met het sleutelwoord virtual.

class Base {
public:
    int data;
};

class Derived1 : virtual public Base { // Virtuele erfenis
};

class Derived2 : virtual public Base { // Virtuele erfenis
};

class Final : public Derived1, public Derived2 { // Diamantvormige erfenis
};

// In het object van de klasse Final zal slechts één exemplaar van Base::data bestaan