GeeksforGeeks (Polski)

zdolność klasy do wyprowadzania właściwości i cech z innej klasy nazywa się dziedziczeniem. Dziedziczenie jest jedną z najważniejszych cech programowania obiektowego.
Sub Class: klasa, która dziedziczy właściwości z innej klasy nazywa się Sub class lub pochodną Class.
Klasa Super: Klasa, której właściwości są dziedziczone przez podklasę, nazywana jest klasą bazową lub Superklasą.

artykuł jest podzielony na następujące podtypy:

  1. dlaczego i kiedy stosować dziedziczenie?,
  2. sposoby dziedziczenia
  3. rodzaje dziedziczenia

Dlaczego i kiedy stosować dziedziczenie?

rozważmy grupę pojazdów. Musisz utworzyć klasy dla autobusu, samochodu i ciężarówki. Metody fuelAmount(), capacity(), applyBrakes() będą takie same dla wszystkich trzech klas., Jeśli tworzymy te klasy unikając dziedziczenia, to musimy zapisać wszystkie te funkcje w każdej z trzech klas, jak pokazano na poniższym rysunku:

widać wyraźnie, że powyższy proces powoduje powtórzenie tego samego kodu 3 razy. Zwiększa to szanse na błędy i redundancję danych. Aby uniknąć tego typu sytuacji, stosuje się dziedziczenie., Jeśli stworzymy pojazd klasowy i zapiszemy w nim te trzy funkcje i odziedziczymy resztę klas z klasy pojazdu, to możemy po prostu uniknąć powielania danych i zwiększyć ponowną użyteczność. Spójrz na poniższy schemat, w którym trzy klasy są dziedziczone z klasy pojazdu:

używając dziedziczenia, musimy napisać funkcje tylko jeden raz zamiast trzech razy, ponieważ odziedziczyliśmy resztę trzech klas z klasy podstawowej(pojazdu).,

Implementowanie dziedziczenia w C++: aby utworzyć podklasę, która jest dziedziczona z klasy bazowej, musimy postępować zgodnie z poniższą składnią.
składnia:

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

tutaj, subclass_name jest nazwą podklasy, access_mode jest trybem, w którym chcesz dziedziczyć tę podklasę, na przykład: public, private itd. base_class_name to nazwa klasy bazowej, od której chcesz dziedziczyć podklasę.
Uwaga: Klasa pochodna nie dziedziczy dostępu do prywatnych członków danych., Jednak dziedziczy ona pełny obiekt nadrzędny, który zawiera wszelkie prywatne elementy, które Klasa deklaruje.



Wyjście:

Child id is 7Parent id is 91

w powyższym programie Klasa 'Child' jest publicznie dziedziczona z klasa parent 'tak więc publiczne elementy danych klasy „parent” będą również dziedziczone przez klasę „Child”.

tryby dziedziczenia

  1. tryb publiczny: jeśli wywodzimy podklasę z publicznej klasy bazowej., Wtedy publiczny członek klasy bazowej stanie się publiczny w klasie pochodnej, a chronione Członkowie klasy bazowej staną się chronieni w klasie pochodnej.
  2. tryb chroniony: jeśli uzyskamy podklasę z chronionej klasy bazowej. Wtedy zarówno public member, jak i protected member klasy bazowej staną się chronione w klasie pochodnej.
  3. Tryb prywatny: jeśli uzyskamy podklasę z prywatnej klasy bazowej. Wtedy zarówno członek publiczny, jak i członkowie chronieni klasy bazowej staną się prywatnymi w klasie pochodnej.,

Uwaga: prywatne Członkowie klasy bazowej nie mogą być bezpośrednio dostępne w klasie pochodnej, podczas gdy chronione członkowie mogą być bezpośrednio dostępne. Na przykład klasy B, C I d zawierają zmienne x, y i z w poniższym przykładzie. To tylko kwestia dostępu.,

poniższa tabela podsumowuje powyższe trzy tryby i pokazuje specyfikację dostępu członków klasy bazowej w podklasie, gdy pochodzą z trybów publicznych, chronionych i prywatnych:

rodzaje dziedziczenia w C++

szczególny przypadek dziedziczenia hybrydowego : dziedziczenie wielościeżkowe:
klasa pochodna z dwoma klasami bazowymi i te dwie klasy bazowe mają jedną wspólną klasę bazową nazywa się dziedziczeniem wielościeżkowym. W tego typu dziedziczeniu może pojawić się niejednoznaczność.,

rozważ następujący program:


wyjście:

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

w powyższym przykładzie oba ClassB&classc dziedziczą CLASSA, oba mają pojedynczą kopię CLASSA. Jednak ClassD dziedziczy obie ClassB & ClassC, dlatego ClassD ma dwie kopie ClassA, jedną z ClassB i drugą z ClassC.,
jeśli chcemy uzyskać dostęp do elementu danych A ClassA poprzez obiekt ClassD, musimy określić ścieżkę, z której będzie dostępny a, czy to z ClassB czy ClassC, kompilator bco ' z nie potrafi rozróżnić dwóch kopii ClassA w ClassD.
istnieją 2 sposoby na uniknięcie tej niejednoznaczności:

  1. użyj operatora rozdzielczości zakresu
  2. użyj wirtualnej klasy bazowej

unikanie niejednoznaczności przy użyciu operatora rozdzielczości zakresu:
używając operatora rozdzielczości zakresu możemy ręcznie określić ścieżkę, z której będzie dostępny element a, jak pokazano w instrukcji 3 i 4, w powyższym przykładzie.,

div>

iv

obj.ClassC::a = 100;



uwaga : istnieją jednak dwie kopie CLASSA w classd.,
unikanie dwuznaczności przy użyciu wirtualnej klasy bazowej:



Wyjście:

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

zgodnie z powyższy przykład, Classd ma tylko jedną kopię CLASSA, dlatego polecenie 4 nadpisze wartość a, podaną w instrukcji 3.

autorem artykułu jest Harsh Agarwal. Jeśli lubisz GeeksforGeeks i chciałbyś przyczynić się do tego, możesz również napisać artykuł za pomocą contribute.geeksforgeeks.org lub wyślij artykuł do [email protected]., Zobacz swój artykuł pojawiający się na stronie głównej GeeksforGeeks i pomóż innym Geekom.

Uwaga czytelniku! Nie przestawaj się teraz uczyć. Zdobądź wszystkie ważne koncepcje C++ Foundation i STL dzięki kursom C++ Foundation i STL w przyjaznej dla studentów cenie i stań się gotowy na branżę.

Tagi artykułów :

C++
Tagi ćwiczeń:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *