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. |
Implementace | Třída deriv_class: základní třída access_specifier | Tří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řídy | Odvozená třída má přístup k kombinovaným vlastnostem zděděných základních tříd |
Viditelnost | Veřejné, soukromé, chráněné | Veřejné, soukromé, chráněné |
Doba běhu | Vyžadovat malé množství času spuštění nad hlavou | Vyž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
- 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.
- 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.
- 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.
- 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í.
- 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.