Tablica usporedbe
Osnova za usporedbu | Jedno nasljeđivanje | Više nasljeđivanja |
---|---|---|
Osnovni, temeljni | Izvedena klasa nasljeđuje jednu osnovnu klasu. | Izvedena klasa nasljeđuje dvije ili više od dvije osnovne klase. |
izvršenje | Razred izvedenog klase: osnovna klasa access_specifier | Izvedena klasa _class: access_specifier base_class1, access_specifier base_class2, .... |
Pristup | Izvedena klasa pristupa značajkama jedne osnovne klase | Izvedena klasa pristupa kombiniranim značajkama naslijeđenih osnovnih klasa |
Vidljivost | Javno, privatno, zaštićeno | Javno, privatno, zaštićeno |
Vrijeme izvođenja | Zahtijevati malu količinu vremena rada preko glave | Zahtijevati dodatnu nadogradnju u odnosu na pojedinačno nasljeđivanje |
Definicija jedinstvenog nasljeđivanja
U pojedinačnom nasljeđivanju postoji jedna osnovna klasa i jedna izvedena klasa. Izvedena klasa nasljeđuje osnovnu klasu javno, zaštićeno i privatno. Članovima osnovne klase može se pristupiti izvedena klasa prema specifikatoru pristupa navedenom za nasljeđivanje osnovne klase.
Uzmimo primjer stvarnog života, imamo dvije klase, “klasu računa” i “klasu štednog računa”. Ovdje "spremanje klase računa" može naslijediti značajku "klase računa", tako da će klasa "računa" postati osnovna / super / nadređena klasa za spremanje klase računa, a "klasa štednje računa" će biti izvedena klasa.
Ovdje su atributi "klase računa" acc_no (private) i balance (public), a funkcije člana su initialize (), get_accno () koje su javne. Sada se “računska klasa” nasljeđuje na “štednju klase računa” tako da se svim javnim članovima “računa klase” može izravno pristupiti “štednom klasom računa”. Može pristupiti privatnom članu "klase računa" kroz javne članske funkcije "klase računa", ali im ne može pristupiti izravno.
Implementacija pojedinačnog nasljeđivanja:
# uključuju korištenje imena prostora std; klasa Račun {int acc_no, ; public: float ravnoteža; praznina inicijalizira (int x, int y) {acc_no = x; ravnoteža = y; } int get_accno. () {return acc_no; }}; klasa Saving_acc: javni račun {float intrest_rate; public: // konstruktor klase Saving_acc Saving_acc (int c) {interest_rate = c; } void display () {cout <Definicija višestrukog nasljeđivanja
Višestruko nasljeđivanje omogućuje izvedenoj klasi da naslijedi kombinirane značajke više od jedne bazne klase, tj. Imamo jednu izvedenu klasu i više baznih klasa. Svaka osnovna klasa mora biti naslijeđena spominjanjem posebnog specifikatora pristupa za svaki od njih. Izvedena klasa može pristupiti članovima osnovnih klasa na temelju specifikatora pristupa kojim se nasljeđuje osnovna klasa.
Omogućuje lakše s primjerom imamo tri klase tj. Bicikla, automobila i vozila. Sada, "Vozilo" može naslijediti značajke "Bike" kao i "Car". Dakle, "Vozilo" postaje izvedena klasa, a "Bike" i "Car" postaju osnovna klasa. Sada su “Bike” i “Car” javno naslijeđeni od “Vehicle”, a može pristupiti svim javnim članovima “Bike” i “Car”, ali kako imamo entitet Model_no zaštićen u “Car” tako da je privatan za Car, ali može biti kojoj pristupa "Vozilo".
Implementacija višestrukog nasljeđivanja:
# uključuje korištenje prostora naziva std; klasa Bike {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; klasa Car {protected: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; klasa Vehical: public Bike, javni auto {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "broj kotača" <Ključne razlike između pojedinačnog i višestrukog nasljeđivanja
- Pojedinačno nasljeđivanje je jedna izvedena klasa koja ima jednu baznu klasu, dok u višestrukom nasljeđivanju ima dvije ili više od dvije osnovne klase, ali jednu izvedenu klasu.
- Višestruko nasljeđivanje je vrlo zbunjujuće jer ovdje jedna izvedena klasa nasljeđuje dvije ili više bazne klase. Ako bazne klase imaju atribut ili funkciju s istim imenom onda za izvedenu klasu, postaje teško identificirati koji atribut ili funkcija osnovne klase mora izvesti.
- Opća pitanja su manja u slučaju jednog nasljeđivanja. No, u slučaju višestrukog nasljeđivanja konstrukcija ili uništenje objekta poziva konstruktore i destruktore roditeljske klase u hijerarhiji klase koja povećava opterećenje.
- Jedno nasljeđivanje je više prema specijalizaciji. Dok je višestruko nasljeđivanje više prema generalizaciji.
- Pošto jedno naslijeđe ima manje opterećenja, ima manje vremena u odnosu na višestruko nasljeđivanje.
Zaključak
Nasljeđivanje olakšava rad programera jer ako je jedna klasa već formirana, njezine se značajke mogu prilagoditi drugim ako je potrebno. Iako pristupni specifikator ograničava pristup članovima osnovne klase na određeni način, ali čini podatke sigurnijima. Pojedinačno nasljeđivanje je na neki način jednostavnije i jednostavnije implementirati od višestrukog nasljeđivanja. Nasljeđivanje smanjuje veličinu objektnog koda, ali također utječe na vrijeme izvođenja programa.