Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Zvážte nasledujúci príklad:
``` c++
// Základná trieda
trieda Zviera {
verejné:
názov reťazca;
};
// Odvodená trieda 1
trieda Pes :public Zviera {
verejné:
strunové plemeno;
};
// Odvodená trieda 2
trieda Mačka :verejné Zviera {
verejné:
farba šnúrky;
};
// Odvodená trieda 3 (dedí od psa aj mačky)
trieda domáce zviera :verejný pes, verejná mačka {
verejné:
//...
};
```
Bez virtuálneho dedenia by trieda `Pet` zdedila dve kópie základnej triedy `Animal`, čo by mohlo viesť k chybám behu alebo krájaniu objektov (kde je skonštruovaná iba časť objektu `Pet`). Aby sme tomu zabránili, môžeme použiť virtuálne dedičstvo zadaním kľúčového slova „virtuálne“ v deklarácii základnej triedy:
``` c++
// Základná trieda s virtuálnou dedičnosťou
trieda Zviera {
verejné:
názov reťazca;
};
```
Použitím virtuálnej dedičnosti zdedí trieda „Pet“ iba jednu kópiu základnej triedy „Animal“, čím sa zabezpečí správne správanie a zabráni sa chybám pri behu.
Výhody:
1. Riešenie nejasností: Pomáha vyriešiť nejednoznačnosť, keď viaceré základné triedy majú rovnakú členskú funkciu alebo údajový člen.
2. Znížená réžia pamäte: Zabraňuje krájaniu objektov, znižuje réžiu pamäte a zlepšuje výkon.
3. Flexibilita: Umožňuje komplexné hierarchie dedičnosti, kde môžu odvodené triedy dediť z viacerých základných tried.
Kedy použiť virtuálne dedičstvo:
- Keď máte viacnásobné dedičstvo a chcete sa vyhnúť nejednoznačným základným členom alebo krájaniu objektov.
- Keď chcete zdieľať spoločnú funkčnosť medzi viacerými odvodenými triedami bez duplikovania kódu.