Salīdzinājuma diagramma
Salīdzinājuma pamats | Vienota mantošana | Vairāki mantojumi |
---|---|---|
Pamata | Atvasinātā klase pārmanto vienu bāzes klasi. | Atvasinātā klase pārmanto divas vai vairākas bāzes klases. |
Īstenošana | Klases atvasinātās klases: access_specifier bāzes klase | Klases atvasinātais _class: access_specifier base_class1, access_specifier base_class2, .... |
Piekļuve | Atvasinātā klase piekļūst vienas bāzes klases funkcijām | Atvasinātā klase var piekļūt mantojuma bāzes klasēm |
Redzamība | Publiska, privāta, aizsargāta | Publiska, privāta, aizsargāta |
Palaist laiku | Pieprasiet nelielu palaišanas laiku virs galvas | Pieprasiet papildu runtime overhead, salīdzinot ar vienu mantojumu |
Vienotas mantojuma definīcija
Vienreizējā mantojumā ir viena bāzes klase un viena atvasinātā klase. Atvasinātā klase iegūst bāzes klasi vai nu publiski, aizsargāti un privāti. Bāzes klases biedriem var piekļūt pēc atvasinātās klases saskaņā ar piekļuves specifikāciju, kas norādīta pamatklases pārmantošanas laikā.
Pieņemsim reālu dzīves piemēru, mums ir divas klases, “konta klase” un “glābšanas konta klase”. Šeit "ietaupīt konta klase" var mantot "konta klases" iezīmi, tāpēc "konta klases" klase kļūs par bāzes / super / vecāku klasi, lai ietaupītu konta klasi, un "konta klases taupīšana" būs atvasinātā klase.
Šeit “konta klases” atribūti ir acc_no (privāti) un bilance (publiski), un dalībnieku funkcijas tiek inicializētas (), get_accno (), kas ir publiskas. Tagad „konta klase” tiek pārmantota „glābšanas konta klasei” publiski, tāpēc visiem “konta klases” publiskajiem dalībniekiem var tieši piekļūt “ietaupot konta kategoriju”. Tā var piekļūt „konta klases” privātajam biedram, izmantojot publisko biedru funkcijas „konta klasei”, bet tās nevar tieši piekļūt.
Vienotas mantojuma īstenošana:
# ietver nosaukuma vietas std; klases konts {int acc_no, ; publiski: pludiņš; tukša inicializēšana (int x, int y) {acc_no = x; atlikums = y; } int get_accno. () {atgriezties acc_no; }}; klase Saving_acc: publiskais konts {float intrest_rate; publiski: // Saving_acc klases Saving_acc (int c) {interest_rate = c konstruktors; } tukšs displejs () {cout <Vairāku mantojumu definīcija
Vairākkārtējs mantojums ļauj atvasinātajai šķirai pārņemt vairāk nekā vienas bāzes klases apvienotās īpašības, ti, mums ir viena atvasinātā klase un vairākas bāzes klases. Katrai bāzes klasei ir jābūt mantojamai, minot atsevišķu piekļuves specifikāciju katram no tiem. Atvasinātā klase var piekļūt pamatklases biedriem, pamatojoties uz piekļuves specifikāciju, ar kuru bāzes klase ir mantota.
Ar piemēru mēs varam atvieglot trīs klases, proti, velosipēdu, automašīnu un transportlīdzekli. Tagad „Transportlīdzeklis” var mantot gan „Bike”, gan „Car” funkcijas. Tātad, “Transportlīdzeklis” kļūst par atvasināto klasi, un “Bike” un “Car” kļūst par bāzes klasi. Tagad „Bike” un “Car” ir mantojums ar “Vehicle”, un tas var piekļūt visiem „Bike” un „Car” publiskajiem dalībniekiem, bet, tā kā mums ir uzņēmums Model_no, kas ir aizsargāts ar „Car”, lai tas būtu privāts līdz Car piekļūst “Transportlīdzeklis”.
Vairāku mantojumu īstenošana:
# ietver vārdkopu std; klases velosipēds {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; klases automobilis {aizsargāts: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; klase Transportlīdzekļi: publiskais velosipēds, sabiedriskais automobilis {int no_of_wheels publiski: vehical (int w) {no_of_wheels = w; cout << "nav riteņu" <Galvenās atšķirības starp vienu un vairākiem mantojumiem
- Viens mantojums ir viena no atvasinātajām klasēm ar vienu bāzes klasi, savukārt vairāku mantojumu gadījumā ir divas vai vairākas bāzes klases, bet viena atvasinātā klase.
- Vairāki mantojumi ir diezgan mulsinoši, jo šeit viena atvasinātā klase mantos divas vai vairākas bāzes klases. Ja bāzes klasēm ir atribūts vai funkcija ar tādu pašu nosaukumu, nekā atvasinātajai klasei, kļūst grūti noteikt, kuras bāzes klases atribūtam vai funkcijai tai ir jākļūst.
- Vispārējās izmaksas ir mazākas viena mantojuma gadījumā. Bet vairāku mantojumu gadījumā objekta uzbūve vai iznīcināšana izraisa vecāku klases konstruktorus un destruktoru klases hierarhijā, kas palielina pieskaitāmās izmaksas.
- Viens mantojums ir vairāk orientēts uz specializāciju. Tā kā vairāki mantojumi ir vairāk pret vispārināšanu.
- Tā kā atsevišķam mantojumam ir mazāk pieskaitāmās vērtības, tam ir mazāk laika, salīdzinot ar vairākiem mantojumiem.
Secinājums
Mantojums atvieglo programmētāja darbu, jo, ja viena klase jau ir veidota, tās funkcijas var pielāgot, ja nepieciešams. Kaut arī piekļuves specifikators ierobežo piekļuvi bāzes klases biedriem noteiktā veidā, bet tas padara datus drošākus. Viens mantojums ir kaut kā vienkāršāks un vieglāk īstenojams nekā vairākkārtējs mantojums. Mantojums samazina objekta koda lielumu, bet ietekmē arī programmas darbības laiku.