Wykres porównania
Podstawa do porównania | Pojedyncze dziedziczenie | Wielokrotne dziedziczenie |
---|---|---|
Podstawowy | Klasa pochodna dziedziczy pojedynczą klasę podstawową. | Klasa pochodna dziedziczy dwie lub więcej niż dwie klasy bazowe. |
Realizacja | Klasa klasa pochodna: klasa bazowa access_specifier | Klasa pochodna _klasa: access_specifier klasa_przykładowa1, klasa_użytkownika klasa_pozoli2, .... |
Dostęp | Klasa pochodna ma dostęp do funkcji pojedynczej klasy bazowej | Klasa pochodna zapewnia dostęp do połączonych cech odziedziczonych klas bazowych |
Widoczność | Publiczny, prywatny, chroniony | Publiczny, prywatny, chroniony |
Czas pracy | Wymagaj 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
- 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ą.
- 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ć.
- 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.
- Pojedyncze dziedziczenie jest bardziej ukierunkowane na specjalizację. Podczas gdy wielokrotne dziedziczenie jest bardziej ukierunkowane na generalizację.
- 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.