Ieteicams, 2024

Redaktora Izvēle

Starpība starp vienu un vairākiem mantojumiem

Mantojums stingri atbalsta atkārtotas izmantošanas jēdzienu, ti, jaunizveidotā klase atkārtoti izmanto jau esošās klases īpašības. Piekļuves specifikētājs izlemj, kā bāzes klases dalībnieks tiks pārmantots no atvasinātās klases. Ir daudz veidu, kā panākt mantojuma vienu, vairāku, hierarhisku, daudzlīmeņu, hibrīdu. Tā kā mūsu galvenais diskusiju temats ir atšķirība starp vienu un vairākiem mantojumiem. Vienā mantojumā mums ir tikai viena bāzes klase, kuru pārmanto tikai viena atvasinātā klase. Vairākkārtējā mantojumā mums ir vairāk nekā divas bāzes klases, kuras pārmanto tikai viena atvasinātā klase.


Salīdzinājuma diagramma

Salīdzinājuma pamatsVienota mantošanaVairāki mantojumi
PamataAtvasinātā klase pārmanto vienu bāzes klasi.Atvasinātā klase pārmanto divas vai vairākas bāzes klases.
ĪstenošanaKlases atvasinātās klases: access_specifier bāzes klaseKlases atvasinātais _class: access_specifier base_class1, access_specifier base_class2, ....
Piekļuve
Atvasinātā klase piekļūst vienas bāzes klases funkcijāmAtvasinātā klase var piekļūt mantojuma bāzes klasēm
RedzamībaPubliska, privāta, aizsargātaPubliska, privāta, aizsargāta
Palaist laikuPieprasiet nelielu palaišanas laiku virs galvasPieprasiet 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

  1. 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.
  2. 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.
  3. 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.
  4. Viens mantojums ir vairāk orientēts uz specializāciju. Tā kā vairāki mantojumi ir vairāk pret vispārināšanu.
  5. 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.

Top