Doporučená, 2024

Redakce Choice

Rozdíl mezi jednoduchým a vícenásobným dědictvím

Dědičnost silně podporuje koncept opětovného použití, tj. Nově vytvořená třída znovu využívá vlastnosti již existujících. Specifikátor přístupu rozhoduje o způsobu, jakým bude člen základní třídy zděděn odvozenou třídou. Existuje mnoho způsobů, jak dosáhnout dědičnosti jeden, více, Hierarchical, Multilevel, Hybrid. Zatímco naším hlavním tématem diskuse je rozdíl mezi jedním a vícenásobným dědictvím. V jedné dědičnosti máme pouze jednu základní třídu, která je zděděna pouze jednou odvozenou třídou. Ve vícenásobné dědičnosti máme více než dvě základní třídy, které jsou zděděny pouze jednou odvozenou třídou.


Srovnávací graf

Základ pro porovnáníJediné dědictvíVícečetné dědictví
ZákladníOdvozená třída dědí jednu základní třídu.Odvozená třída dědí dvě nebo více než dvě základní třídy.
ImplementaceTřída deriv_class: základní třída access_specifierTřída odvozená _class: access_specifier base_class1, access_specifier base_class2, ....
Přístup
Odvozená třída má přístup k vlastnostem jedné základní třídyOdvozená třída má přístup k kombinovaným vlastnostem zděděných základních tříd
ViditelnostVeřejné, soukromé, chráněnéVeřejné, soukromé, chráněné
Doba běhuVyžadovat malé množství času spuštění nad hlavouVyžadovat další runtime režii ve srovnání s jednou dědičností

Definice jednoho dědictví

V Single inheritance existuje jedna základní třída a jedna odvozená třída. Odvozená třída dědí základní třídu buď veřejně, chráněně a soukromě. K členům základní třídy lze přistupovat pomocí odvozené třídy podle specifikátoru přístupu zadaného během zdědění základní třídy.

Máme příklad reálného života, máme dvě třídy, „třídu účtů“ a „třídu spořicích účtů“. Zde „třída spořicích účtů“ může zdědit funkci „třídy účtů“, takže třída „třída účtů“ se stane třídou základní / nadřazená / nadřazená pro třídu spořicích účtů a „třídou spořicích účtů“ bude odvozená třída.

Atributy „class class“ jsou zde acc_no (private) a rovnováha (public) a členské funkce jsou initialize (), get_accno (), které jsou veřejné. „Třída účtů“ se nyní veřejně zdědí na „třídu spořicích účtů“, takže k veřejnému členovi „třídy účtů“ lze přímo přistupovat pomocí třídy „spořicí účet“. Může přistupovat k soukromému členovi „třídy účtů“ prostřednictvím veřejných členů „třídy účtů“, ale nemá k nim přímý přístup.

Implementace dědičnosti:

 # zahrnují použití jména prostoru std; class Účet {int acc_no, ; public: float balance; void initialize (int x, int y) {acc_no = x; zůstatek = y; } int get_accno. () {return acc_no; }}; class Saving_acc: public Účet {float intrest_rate; public: // konstruktor třídy Saving_acc Saving_acc (int c) {interest_rate = c; } void display () {cout < 

Definice vícenásobného dědictví

Vícenásobná dědičnost umožňuje odvozené třídě zdědit kombinované funkce více než jedné základní třídy, tj. Máme jednu odvozenou třídu a více základních tříd. Každá základní třída musí být zděděna tak, že pro každou z nich bude uveden samostatný specifikátor přístupu. Odvozená třída může přistupovat k členům základních tříd na základě specifikátoru přístupu, kterým je základní třída zděděna.

Umožníme vám to snadněji s příkladem, že máme tři třídy, tj. Kolo, auto a vozidlo. „Vozidlo“ může zdědit vlastnosti „Bike“ a „Car“. „Vozidlo“ se stává odvozenou třídou a „Bike“ a „Car“ se stává základní třídou. Nyní jsou „Bike“ a „Car“ veřejně zděděny „Vehicle“, mohou mít přístup ke všem veřejným členům „Bike“ a „Car“, ale protože máme entitu Model_no chráněnou v „Car“, tak to je soukromé pro Car, ale může být přístupné pomocí „Vehicle“.

Implementace vícečetného dědictví:

 # zahrnout použití jmenného prostoru std; třída Bike {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; třída Car {protected: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; třída Vehical: public Bike, veřejné auto {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "no of wheels" < 

Klíčové rozdíly mezi jedním a více dědičnostmi

  1. Jedna dědičnost je jedna odvozená třída, která má jednu základní třídu, zatímco ve vícenásobné dědičnosti má dvě nebo více než dvě základní třídy, ale jednu odvozenou třídu.
  2. Vícenásobné dědictví je docela matoucí, protože zde jedna odvozená třída dědí dvě nebo více základních tříd. Pokud mají základní třídy atribut nebo funkci se stejným názvem než odvozená třída, je obtížné určit, který atribut nebo funkce základní třídy je odvozena.
  3. Režijní náklady jsou menší v případě jednoho dědictví. V případě vícenásobného dědictví však konstrukce objektu nebo destrukce vyvolá konstruktory a destruktor mateřské třídy v hierarchii tříd, což zvyšuje režii.
  4. Jedno dědictví je více zaměřeno na specializaci. Zatímco vícenásobné dědictví je více zaměřeno na zobecnění.
  5. Vzhledem k tomu, že jedno dědictví má méně režie, má méně runtime ve srovnání s vícenásobným dědictvím.

Závěr

Dědičnost usnadňuje práci programátora, jako by jedna třída již byla vytvořena a její vlastnosti mohou být v případě potřeby upraveny jinými. Ačkoli specifikátor přístupu určitým způsobem omezuje přístup ke členům základní třídy, ale údaje jsou bezpečnější. Jediné dědictví je nějak jednodušší a snadno implementovatelné než vícenásobné dědictví. Dědičnost snižuje velikost objektového kódu, ale také ovlivňuje dobu spuštění programu.

Top