Porovnávacia tabuľka
Základ pre porovnanie | Jednotná dedičnosť | Viacnásobné dedičstvo |
---|---|---|
základné | Odvodená trieda zdedí jednu základnú triedu. | Odvodená trieda zdedí dve alebo viac ako dve základné triedy. |
uskutočnenie | Trieda derived_class: základná trieda access_specifier | Trieda odvodená _class: access_specifier base_class1, access_specifier base_class2, .... |
prístup | Odvodená trieda má prístup k funkciám jednej základnej triedy | Odvodená trieda má prístup k kombinovaným funkciám zdedených základných tried |
viditeľnosť | Verejné, súkromné, chránené | Verejné, súkromné, chránené |
Čas spustenia | Požadovať malé množstvo času chodu nad hlavou | Vyžadovať dodatočné režijné náklady v porovnaní s jednotlivými dedičstvami |
Definícia jednotného dedičstva
V jednotnom dedičstve existuje jedna základná trieda a jedna odvodená trieda. Odvodená trieda dedí základnú triedu buď verejne, chránene a súkromne. Členovia základnej triedy môžu byť pristupované odvodenou triedou podľa špecifikátora prístupu špecifikovaného počas zdedenia základnej triedy.
Poďme mať príklad z reálneho života, máme dve triedy, "triedy účtov" a "úspornú triedu účtov". Tu "funkcia úspornej triedy" môže dediť funkciu "triedy účtov", takže trieda "triedy účtov" sa stane základnou / super / nadradenou triedou pre ukladanie triedy účtov a "ukladacia trieda účtu" bude odvodená trieda.
Tu atribúty "account class" sú acc_no (private) a balance (public) a členské funkcie sú inicializované (), get_accno (), ktoré sú verejné. Teraz sa "class account" zvelebil na "ukladanie účtovnej triedy" verejne, takže všetkým verejným členom "account class" je možné priamo pristupovať prostredníctvom "ukladania triedy účtov". Prístup k súkromnému členovi "triedy účtov" prostredníctvom verejných funkcií členov "triedy účtov", ale nemôže k nim pristupovať priamo.
Implementácia jednotného dedičstva:
# zahŕňa použitie mena priestoru std; class účet {int acc_no, ; verejná: bilancia platieb; void inicializovať (int x, int y) {acc_no = x; zostatok = y; } int get_accno. () {return acc_no; }}; class Saving_acc: public Účet {float intrest_rate; public: // konštruktér Saving_acc triedy Saving_acc (int c) {interest_rate = c; } prázdny displej () {cout <Definícia viacnásobného dedičstva
Viacnásobná dedičnosť umožňuje odvodenej triede dediť kombinované funkcie viac ako jednej základnej triedy, tj máme jedinú odvodenú triedu a niekoľko základných tried. Každá základná trieda sa musí zdediť tak, že sa pre každú z nich uvádza špeciálny špecifikátor prístupu. Odvodená trieda môže pristupovať k členom základnej triedy na základe špecifikátora prístupu, ktorým je zdedená základná trieda.
Umožňuje to uľahčiť s príkladom máme tri triedy, tj bicykel, auto a vozidlo. Teraz "Vehicle" môže zdediť vlastnosti "Bike" a "Car". Takže "vozidlo" sa stáva odvodenou triedou a "Bike" a "Car" sa stávajú základnou triedou. Teraz sú "Bike" a "Car" verejne zdedené vozidlom "Vehicle", ktoré má prístup ku všetkým verejným členom "Bike" a "Car", ale keďže máme model_no chránený v "Car" prístupu k vozidlu.
Implementácia viacnásobného dedičstva:
# zahŕňa použitie namespace std; trieda Bike {int engine_cost; ; verejná: void set_engine_cost (int x) {engine_cost = x; }}; class Car {chránené: int Model_no; verejné: void set_Model_no (int p) {Model_no = p; }}; trieda Vehical: verejné Bike, verejné auto {int no_of_wheels verejné: vehical (int w) {no_of_wheels = w; cout << "žiadne kolesá" <Kľúčové rozdiely medzi jednotlivými a viacnásobnými dedičstvami
- Jednotná dedičnosť je jednou odvodenou triedou, ktorá má jednu základnú triedu, zatiaľ čo vo viacnásobnom dedičstve má dve alebo viac ako dve základné triedy, ale jednu odvodenú triedu.
- Viacnásobné dedičstvo je pomerne mätúce, keďže tu odvodená trieda zdedí dve alebo viac základných tried. Ak majú základné triedy atribút alebo funkciu s rovnakým názvom, potom pre odvodenú triedu je ťažké určiť, ktorý atribút alebo funkcia základnej triedy má získať.
- Problémy s režijnými nákladmi sú v prípade dedičstva menšie. Ale v prípade viacnásobného dedenia objekt stavba alebo zničenie vyvoláva konštruktory a deštruktor rodičovskej triedy v hierarchii tried, čo zvyšuje režijné náklady.
- Jednotné dedičstvo je viac zamerané na špecializáciu. Zatiaľ čo viacnásobné dedičstvo je viac smerom k zovšeobecňovaniu.
- Vzhľadom na to, že jedno dedičstvo má menej režijných nákladov, má menej času v porovnaní s viacerými dedičstvami.
záver
Dedičstvo robí programátorovu prácu jednoduchou, akoby už bola vytvorená jedna trieda, ich funkcie môžu byť upravené inými, ak je to potrebné. Aj keď špecifikátor prístupu obmedzuje prístup k členom základnej triedy určitým spôsobom, ale zabezpečuje väčšiu bezpečnosť údajov. Jednotné dedičstvo je nejako jednoduchšie a ľahšie realizovateľné ako viacnásobné dedičstvo. Dedičstvo znižuje veľkosť objektového kódu, ale tiež ovplyvňuje čas spustenia programu.