GeeksforGeeks (Čeština)

schopnost třídy odvodit vlastnosti a vlastnosti z jiné třídy se nazývá Dědičnost. Dědičnost je jedním z nejdůležitějších rysů objektově orientovaného programování.
Sub Class: třída, která dědí vlastnosti z jiné třídy, se nazývá Sub class nebo odvozená Třída.
Super Class: třída, jejíž vlastnosti jsou zděděny pod třídou, se nazývá základní třída nebo Super třída.

článek je rozdělen do následujících podtémat:

  1. proč a kdy použít dědičnost?,
  2. režimy dědičnosti
  3. typy dědičnosti

proč a kdy použít dědičnost?

zvažte skupinu vozidel. Musíte vytvořit třídy pro Autobus, Auto a kamion. Metody fuelAmount (), capacity (), applyBrakes () budou stejné pro všechny tři třídy., Když jsme se vytvořit tyto třídy se vyhnout dědictví pak musíme napsat všechny tyto funkce v každé ze tří tříd, jak je znázorněno na níže uvedeném obrázku:

můžete jasně vidět, že výše uvedené výsledky procesu zdvojování stejného kódu 3 krát. To zvyšuje šance na chybu a redundanci dat. Aby se zabránilo tomuto typu situace, používá se dědičnost., Pokud vytvoříme třídní vozidlo a zapíšeme do něj tyto tři funkce a zdědíme zbytek tříd od třídy vozidla, můžeme se jednoduše vyhnout duplikaci dat a zvýšit opětovnou použitelnost. Podívejte se na níže uvedené schéma, v němž tři třídy jsou zděděné od třídy vozidel:

Pomocí dědičnosti, musíme napsat funkci pouze jednou namísto třikrát, jak jsme zdědili zbytek tři třídy ze základní třídy(Vozidla).,

Realizace dědičnosti v C++: Pro vytvoření sub-třídy, které dědí ze základní třídy musíme postupovat podle níže uvedené syntaxe.
Syntaxe:

class subclass_name : access_mode base_class_name{ //body of subclass};

Tady, subclass_name je název sub třídy, access_mode je režim, ve kterém chcete, aby zdědil tuto ponorku třídy, například: veřejné, soukromé atd. a base_class_name je název základní třídy, ze které chcete zdědit dílčí třídu.
Poznámka: odvozená třída nezdědí přístup k soukromým členům dat., Zdědí však úplný nadřazený objekt, který obsahuje všechny soukromé členy, které tato třída deklaruje.



Výstup:

Child id is 7Parent id is 91

Ve výše uvedeném programu „Dítě“ třída je veřejně zdědil od „Mateřské“ třídy tak veřejné datové členy třídy „Mateřské“ bude také dědí třídy „Dítě“.

režimy dědičnosti

  1. veřejný režim: pokud odvodíme dílčí třídu z veřejné základní třídy., Pak se veřejný člen základní třídy stane veřejným v odvozené třídě a chránění členové základní třídy budou chráněni v odvozené třídě.
  2. chráněný režim: pokud odvodíme dílčí třídu z Chráněné základní třídy. Pak se veřejný člen i chránění členové základní třídy stanou chráněnými v odvozené třídě.
  3. Private mode: pokud odvodíme dílčí třídu ze soukromé základní třídy. Pak se veřejný člen i chránění členové základní třídy stanou soukromými v odvozené třídě.,

Poznámka: soukromé členy základní třídy nelze přímo přistupovat v odvozené třídě, zatímco chráněné členy mohou být přímo přístupné. Například třídy B, C A D obsahují proměnné x, y A z v níže uvedeném příkladu. Je to jen otázka přístupu.,

následující tabulka shrnuje výše uvedené tři režimy a ukazuje specifikátor přístupu členy základní třídy v sub odvozené třídě, když ve veřejné, chráněné a soukromé režimy:

Typy Dědičnosti v C++.

zvláštní případ hybridní dědictví : Multipath dědictví:
odvozené třídě dvě základní třídy a tyto dvě základní třídy mají jeden společný základní třídy je tzv. multipath dědictví. Nejednoznačnost může arrise v tomto typu dědictví.,

Zvažte následující program:



Výstup:

A from ClassB : 10A from ClassC : 100B : 20C : 30D : 40

Ve výše uvedeném příkladu, jak ClassB & ClassC zdědit ClassA, oba mají jednu kopii ClassA. Nicméně ClassD zdědit oba ClassB & ClassC, proto ClassD mají dvě kopie ClassA, jeden z ClassB a další z ClassC.,
Když budeme potřebovat pro přístup k datům členů z ClassA přes objekt ClassD, musíme zadat cestu, ze které se bude přistupovat, ať už je to z ClassB nebo ClassC, bco ‚ z kompilátor nemůže rozlišit dvě kopie ClassA v ClassD.
k Dispozici jsou 2 způsoby, jak se vyhnout této dvojznačnosti:

  1. Použití rozlišení operátor oboru
  2. Použít virtuální základní třídy

Vyhnout se dvojznačnosti pomocí rozlišení operátor oboru:
Pomocí rozlišení operátor oboru můžeme ručně zadat cestu, ze které data člen bude přistupovat, jak je uvedeno v prohlášení, 3 a 4 ve výše uvedeném příkladu.,

obj.ClassB::a = 10;
obj.ClassC::a = 100;



Poznámka : Přesto, tam jsou dvě kopie ClassA v ClassD.,
Vyhnout se dvojznačnosti pomocí virtuální základní třídy:



Výstup:

A : 100B : 20C : 30D : 40

Podle výše uvedeného příkladu, ClassD má pouze jednu kopii ClassA, proto prohlášení 4 přepíše hodnotu, s ohledem na prohlášení 3.

k tomuto článku přispívá drsný Agarwal. Pokud se vám líbí GeeksforGeeks a chtěli byste přispět, můžete také napsat článek pomocí contribute.geeksforgeeks.org nebo napište svůj článek na [email protected]., Podívejte se na svůj článek, který se objeví na hlavní stránce GeeksforGeeks a pomůže ostatním geekům.

čtenář pozornosti! Nepřestávej se učit. Získejte všechny důležité C++ Foundation a STL koncepty s C++ Foundation a STL kurzy za studentskou cenu a připravte se na průmysl.

article Tags:

c++
practice Tags:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *