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