Wszystko, co musisz wiedzieć o dziedziczeniu w C ++



W tym artykule znajdziesz szczegółową i wszechstronną wiedzę na temat dziedziczenia w C ++, różnych jego typów i sposobów ich implementacji.

C ++ jest językiem zorientowanym obiektowo. Abstrakcja danych, polimorfizm, enkapsulacja i dziedziczenie to kamienie węgielne OOP. W tym poście zrozumiemy, czym jest dziedziczenie? Rodzaje dziedziczenia w C ++ i wszystkie niezbędne pojęcia z nim związane od podstaw. Na koniec przyjrzymy się również wadom tej potężnej koncepcji i spróbujemy ją rozwiązać.

Co to jest dziedziczenie w C ++

Dziedziczenie jest jedną z najpotężniejszych i najczęściej używanych koncepcji w C ++ lub każdym innym języku zorientowanym obiektowo. Zrozumienie tej koncepcji wymaga trochę wiedzy o klasach i obiektach. Korzystając z dziedziczenia, możemy stworzyć klasę składającą się z ogólnych metod i atrybutów. Ta klasa może być dziedziczona przez inne klasy zawierające bardziej szczegółowe metody.





Dziedziczenie w C ++

W ten sposób nie musimy ciągle pisać tych samych funkcji, co oszczędza czas i zwiększa czytelność kodu.



Składnia:

class pochodne_class: access_type base_class {// class body}

Klasa podstawowa: Klasa składająca się ze wszystkich ogólnych metod i atrybutów, które mogą być współużytkowane przez inne klasy w celu zwiększenia czytelności kodu, nazywana jest klasą bazową.

Klasy pochodnej: Klasa, która składa się z bardziej szczegółowych metod i dziedziczy klasę, nazywana jest klasą pochodną. Klasa pochodna może być również klasą bazową dla innej klasy pochodnej.



Jeśli utworzymy klasę XYZ, z pewnymi atrybutami i metodami. Teraz uczeń będzie miał inne atrybuty, ale będzie zawierał również elementy klasy XYZ i to samo dotyczy klasy wydziałowej. Zobaczmy diagram:

znalezienie największej liczby w tablicy java

Tak więc klasa studentów i wykładowców odziedziczy po XYZ.

Specyfikator dostępu Zrozumieliśmy, jak klasa może dziedziczyć inną klasę. Ale niektórzy ludzie mogą powiedzieć, że jest to niebezpieczna metoda, ponieważ wszystkie atrybuty i metody klasy bazowej lub klasy nadrzędnej są współdzielone z klasą podrzędną lub pochodną. Na przykład, jeśli klasa „Bank” jest dziedziczona przez klasę „klienci” i „inwestorzy”. Atrybuty klasy „Bank”, takie jak „vaultpassword”, inne informacje dotyczące klientów i dane prywatne są udostępniane „klientom” i „inwestorom”, co jest niebezpieczne.

Aby rozwiązać powyższy problem, C ++ używa specyfikatorów dostępu, aby ograniczyć dostęp atrybutów klasy bazowej do klasy pochodnej. W języku C ++ istnieją łącznie 3 typy specyfikatorów dostępu

  1. Publiczny
  2. Prywatny
  3. Chroniony

Poniższa tabela daje dobre zrozumienie tego, do jakiego typu danych może uzyskać dostęp klasa pochodna zgodnie z różnymi specyfikatorami dostępu.

Specyfikator dostępu Dane publiczne Dane prywatne Chronione dane
Prywatny Nie dziedziczoneNie dziedziczoneNie dziedziczone
Chroniony Chroniony Prywatny Chroniony
Publiczny Publiczny Prywatny Chroniony

Dziedziczenie pojedyncze

Dziedziczenie pojedyncze można uznać za zwykłą waniliową formę dziedziczenia. W przypadku dziedziczenia pojedynczego pojedyncza klasa dziedziczy po klasie bazowej.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Ten przypadek dziedziczenia jest nazywany dziedziczeniem wielopoziomowym. Klasa znajdująca się między pierwszą a ostatnią klasą jest również nazywana pośrednią klasą bazową.Jak myślisz, czy ostatnia klasa może dziedziczyć członków pierwszej klasy? Tak, może

#include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Wynik:

Wartość a = 10

Wartość b = 20

Wartość c = 30

Wartość d = 50

Dziedziczenie hierarchiczne

Niektórych problemów nie można rozwiązać za pomocą dziedziczenia jedno- lub wielopoziomowego. W dziedziczeniu hierarchicznym więcej niż 1 klasa dziedziczy z jednej klasy bazowej.

#include using namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

Wynik:

Jesteśmy w klasie College

co to jest anakonda dla pythona

Jesteśmy w klasie College

Dziedziczenie wielokrotne w C ++

Widzieliśmy, że w dziedziczeniu hierarchicznym jedna klasa bazowa miała więcej niż jedną klasę pochodną. W przypadku dziedziczenia wielokrotnego jedna klasa pochodna ma więcej niż jedną klasę bazową.

#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: public Jeden, publiczny Dwa {public: void Display () {std :: cout<< 'Value of a = ' < W tym momencie dobrze rozumiemy wszystkie typy dziedziczenia używane w C ++. Ale poczekaj, a co, jeśli będziemy chcieli użyć 2 różnych typów dziedziczenia? Czy to możliwe? Tak, jest to możliwe z pomocą dziedziczenia hybrydowego. W dziedziczeniu hybrydowym łączymy 2 różne rodzaje dziedziczenia. Na przykład - dziedziczenie wielopoziomowe i wielokrotne, dziedziczenie hierarchiczne i wielokrotne itp.

#include using namespace std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} class Kraj {protected: int d public: void getinfoCountry (int m) {d = m}} class Australia: public Continent, public Country {public: void Display () {std :: cout<< 'Value of a = ' < 

Zrozummy powyższy diagram, który pomoże nam zrozumieć problem z diamentami. klasa B i klasa C dziedziczy po klasie A, stąd zarówno klasa A, jak i klasa B mają atrybuty i metody klasy A. jeśli klasa D dziedziczy z klasy B, a także klasy C. klasa D będzie miała wszystkie atrybuty klasy B i klasy C Posiada również wszystkie atrybuty klasy A odziedziczone z klasy B jak również klasy C. stąd jeśli zrobimy obiekt klasy D i wywołamy metodę klasy A. to powstanie niejednoznaczna sytuacja i kompilator będzie mylony skąd powinien klasować metodę A, z klasy B lub klasy D.

Aby rozwiązać tę niejednoznaczność, używamy pojęcia zwanego wirtualną klasą bazową. Kiedy tworzymy klasę bazową wirtualną klasą bazową, tylko jedna kopia tej klasy jest dziedziczona bez względu na liczbę istniejących ścieżek między wirtualną klasą bazową a klasą pochodną.

klasa A {} klasa B: wirtualna publiczna A {} klasa C: wirtualna publiczna A {} klasa D: publiczna C, publiczna D {}

Na tym kończymy artykuł dotyczący dziedziczenia w C ++. Jeśli chcesz dowiedzieć się więcej, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online. Szkolenie i certyfikacja J2EE i SOA firmy Edureka ma na celu przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych struktur Java, takich jak Hibernate i Spring.

Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na tym blogu, a my skontaktujemy się z Tobą tak szybko, jak to możliwe.

utwórz połączoną listę w c