Zalecane, 2019

Wybór Redakcji

Różnica między dziedziczeniem pojedynczym a wielokrotnym

Dziedziczenie silnie wspiera koncepcję ponownego użycia, tj. Nowo utworzona klasa ponownie wykorzystuje właściwości już istniejących. Specyfikator dostępu decyduje o sposobie, w jaki element klasy podstawowej zostanie odziedziczony przez klasę pochodną. Istnieje wiele sposobów na osiągnięcie dziedziczenia: single, multiple, Hierarchical, Multilevel, Hybrid. Podczas gdy naszym głównym tematem dyskusji jest różnica pomiędzy dziedziczeniem pojedynczym a wielokrotnym. W dziedziczeniu pojedynczym mamy tylko jedną klasę bazową, która jest dziedziczona tylko przez jedną klasę pochodną. W dziedziczeniu wielokrotnym mamy więcej niż dwie klasy bazowe, które są dziedziczone łącznie tylko przez jedną klasę pochodną.


Wykres porównania

Podstawa do porównaniaPojedyncze dziedziczenieWielokrotne dziedziczenie
PodstawowyKlasa pochodna dziedziczy pojedynczą klasę podstawową.Klasa pochodna dziedziczy dwie lub więcej niż dwie klasy bazowe.
RealizacjaKlasa klasa pochodna: klasa bazowa access_specifierKlasa pochodna _klasa: access_specifier klasa_przykładowa1, klasa_użytkownika klasa_pozoli2, ....
Dostęp
Klasa pochodna ma dostęp do funkcji pojedynczej klasy bazowejKlasa pochodna zapewnia dostęp do połączonych cech odziedziczonych klas bazowych
WidocznośćPubliczny, prywatny, chronionyPubliczny, prywatny, chroniony
Czas pracyWymagaj niewielkiej ilości czasu pracy na głowęWymagaj dodatkowego narzutu w czasie wykonywania w porównaniu do pojedynczego dziedziczenia

Definicja pojedynczego dziedziczenia

W dziedziczeniu pojedynczym istnieje jedna klasa podstawowa i jedna klasa pochodna. Klasa pochodna dziedziczy klasę podstawową publicznie, chronicznie i prywatnie. Dostęp do elementów klasy bazowej można uzyskać za pomocą klasy pochodnej zgodnie ze specyfikatorem dostępu określonym podczas dziedziczenia klasy bazowej.

Miejmy przykład z życia, że ​​mamy dwie klasy, "klasę konta" i "klasę konta oszczędnościowego". Tutaj "zapisywanie klasy konta" może dziedziczyć cechę "klasy konta", więc klasa "klasa konta" stanie się klasą base / super / parent dla zapisu klasy konta, a "zapisywanie klasy konta" będzie klasą pochodną.

Tutaj atrybutami "klasy konta" są acc_no (prywatne) i saldo (publiczne), a funkcje członkowskie to initialize (), get_accno (), które są publiczne. Teraz "klasa konta" jest dziedziczona po "zapisaniu klasy konta" publicznie, więc do wszystkich publicznych członków "klasy konta" można uzyskać bezpośredni dostęp poprzez "zapisanie klasy konta". Może uzyskać dostęp do prywatnego członka "klasy konta" poprzez publiczne funkcje członkowskie "klasy konta", ale nie ma do nich bezpośredniego dostępu.

Wdrożenie pojedynczego dziedziczenia:

 # include using name space std; Konto klasy {int acc_no, ; public: float balance; void initialize (int x, int y) {acc_no = x; saldo = y; } int get_accno. () {return acc_no; }}; klasa Saving_acc: public Account {float intrest_rate; public: // konstruktor klasy Saving_acc Saving_acc (int c) {interest_rate = c; } void display () {cout < 

Definicja wielokrotnego dziedziczenia

Dziedziczenie wielokrotne umożliwia klasie pochodnej dziedziczenie połączonych cech więcej niż jednej klasy bazowej, tzn. Mamy jedną klasę pochodną i wiele klas bazowych. Każda klasa bazowa musi być dziedziczona przez wymienienie osobnego specyfikatora dostępu dla każdego z nich. Klasa pochodna może uzyskiwać dostęp do elementów klas bazowych na podstawie specyfikatora dostępu, w którym dziedziczona jest klasa podstawowa.

Zróbmy to łatwiej, na przykładzie mamy trzy klasy, tj. Bike, Car i Vehicle. Teraz "Pojazd" może dziedziczyć cechy "Rower", a także "Samochód". Tak więc "Pojazd" staje się klasą pochodną, ​​a "Rower" i "Samochód" stają się klasą podstawową. Teraz "Rower" i "Samochód" są publicznie dziedziczone przez "Pojazd", ma on dostęp do wszystkich publicznych członków "Roweru" i "Samochodu", ale ponieważ mamy obiekt Model_no chroniony w "Samochodzie", więc jest prywatny dla Samochodu, ale może być dostępne przez "Pojazd".

Implementacja wielokrotnego dziedziczenia:

 # include using namespace std; class Bike {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; class Car {protected: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; klasa Pojazdy: publiczny Rower, publiczny samochód {int no_of_wheels publiczny: vehical (int w) {no_of_wheels = w; cout << "no of wheels" < 

Kluczowe różnice między dziedziczeniem pojedynczym a wielokrotnym

  1. Dziedziczenie pojedyncze jest jedną klasą pochodną mającą jedną klasę podstawową, natomiast w dziedziczeniu wielokrotnym ma dwie lub więcej niż dwie klasy bazowe, ale jedną klasę pochodną.
  2. Dziedziczenie wielokrotne jest dość mylące, ponieważ jedna klasa pochodna dziedziczy dwie lub więcej klas bazowych. Jeśli klasy bazowe mają atrybut lub funkcję o tej samej nazwie, a następnie dla klasy pochodnej, trudno jest określić, który atrybut lub funkcję klasy bazowej musi wywodzić.
  3. Zagadnienia ogólne są mniejsze w przypadku pojedynczego dziedziczenia. Ale w przypadku dziedziczenia wielokrotnego konstrukcja lub destrukcja obiektu wywołuje konstruktory i destruktory klasy nadrzędnej w hierarchii klas, co zwiększa narzut.
  4. Pojedyncze dziedziczenie jest bardziej ukierunkowane na specjalizację. Podczas gdy wielokrotne dziedziczenie jest bardziej ukierunkowane na generalizację.
  5. Ponieważ dziedziczenie pojedyncze ma mniej narzutów, ma mniej czasu wykonywania w porównaniu z dziedziczeniem wielokrotnym.

Wniosek

Dziedziczenie sprawia, że ​​programista jest łatwy w obsłudze, tak jakby jedna klasa została już uformowana, a jej funkcje mogą zostać zaadaptowane przez inne, jeśli jest to wymagane. Chociaż specyfikator dostępu ogranicza dostęp do członków klasy bazowej w określony sposób, ale powoduje to, że dane są bezpieczniejsze. Dziedziczenie pojedyncze jest w jakiś sposób prostsze i łatwiejsze do wdrożenia niż wielokrotne dziedziczenie. Dziedziczenie zmniejsza rozmiar kodu obiektu, ale także wpływa na czas wykonywania programu.

Top