Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi jednotlivými a viacnásobnými dedičstvami

Dedičstvo výrazne podporuje koncepciu opakovanej použiteľnosti, tj novo vytvorená trieda opätovne využíva vlastnosti už existujúcich. Prístupový špecifikátor rozhodne o spôsobe, akým bude člen základnej triedy zdedený odvodenou triedou. Existuje mnoho spôsobov, ako dosiahnuť dedičnosť jednotné, viacnásobné, hierarchické, viacúrovňové, hybridné. Zatiaľ čo našou hlavnou témou diskusie je rozdiel medzi jedným a viacnásobným dedičstvom. V jednom dedičstve máme iba jednu základnú triedu, ktorá je zdedená iba jednou odvodenou triedou. Vo viacnásobnom dedičstve máme viac ako dve základné triedy, ktoré sú spoločne zdedené iba jednou odvodenou triedou.


Porovnávacia tabuľka

Základ pre porovnanieJednotná 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čnenieTrieda derived_class: základná trieda access_specifierTrieda odvodená _class: access_specifier base_class1, access_specifier base_class2, ....
prístup
Odvodená trieda má prístup k funkciám jednej základnej triedyOdvodená 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 spusteniaPožadovať malé množstvo času chodu nad hlavouVyž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

  1. 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.
  2. 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ť.
  3. 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.
  4. Jednotné dedičstvo je viac zamerané na špecializáciu. Zatiaľ čo viacnásobné dedičstvo je viac smerom k zovšeobecňovaniu.
  5. 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.

Top