Sobes.tech
Middle+

Čo je virtuálne dedičstvo?

sobes.tech AI

Odpoveď od AI

Virtuálne dedičstvo je forma dedičstva v C++, ktorá umožňuje vyhnúť sa problémom "diamantového problému" (diamond problem), keď je tá istá základná trieda dedičná nepriamo viacerými cestami. Pri virtuálnom dedičstve bude spoločná základná trieda existovať v jednom exemplári v objekte konečnej triedy.

Výhody:

  • Vyhýba sa duplikácii dát a funkcií zo spoločnej základnej triedy.
  • Zabezpečuje jediný zdroj pre prístup k členom virtuálnej základnej triedy.

Nevýhody:

  • Zložitejšia konštrukcia objektov a prístup k virtuálnym základným triedam (cez "nepriame" ukazovatele alebo posuny).
  • Mierne zníženie výkonu pri prístupe k členom virtuálnej základnej triedy kvôli potrebe riešiť posuny počas behu.
  • Obmedzenia pri používaní virtuálnych základných tried v určitých kontextoch (napríklad pri statickej inicializácii).

Používa sa pri deklarácii základnej triedy pomocou kľúčového slova virtual.

class Base {
public:
    int data;
};

class Derived1 : virtual public Base { // Virtuálne dedičstvo
};

class Derived2 : virtual public Base { // Virtuálne dedičstvo
};

class Final : public Derived1, public Derived2 { // Diamantové dedičstvo
};

// V objekte triedy Final bude len jeden exemplár Base::data