Soovitatav, 2021

Toimetaja Valik

Erinevus ühe ja mitme pärandi vahel

Pärand toetab tugevalt taaskasutatavuse mõistet, st äsja loodud klass kasutab juba olemasolevate omaduste kasutamist. Juurdepääsu spetsifikatsioon otsustab, kuidas põhiklassi liige pärineb klassist. On mitmeid viise pärandi ühe, mitme, hierarhilise, mitmetasandilise, hübriidi saavutamiseks. Arvestades, et meie peamine arutelu on üksik- ja mitmekordse pärimise erinevus. Ühe pärandina on meil ainult üks põhiklass, mis pärineb ainult ühest tuletatud klassist. Mitmekordse pärimise korral on meil rohkem kui kaks põhiklassi, mida pärivad vaid ühest tuletatud klassist.


Võrdluskaart

Võrdluse alusÜhtne pärandMitmekordne pärand
PõhilineTuletatud klass pärineb ühest põhiklassist.Tuletatud klass pärineb kahest või enamast põhiklassist.
RakendamineKlassi tuletatud klass: access_specifier baasklassKlassi tuletatud _ klass: access_specifier base_class1, access_specifier base_class2, ....
Juurdepääs
Tuletatud klass võimaldab kasutada ühe põhiklassi omadusiTuletatud klass võimaldab päritud põhiklasside kombineeritud omadusi
NähtavusAvalik, era-, kaitstudAvalik, era-, kaitstud
KäivitusaegNõuda väikest kogust jooksuaega pea kohalNõuda täiendavat käitusaega, võrreldes ühe pärandiga

Ühe pärimise mõiste

Ühe pärandi puhul on olemas üks põhiklass ja üks tuletatud klass. Tuletatud klass pärineb põhiklassi kas avalikult, kaitstult ja eraviisiliselt. Baasklassi liikmetele on ligipääs tuletatud klassi järgi juurdepääsukooderi alusel, mis on määratud põhiklassi pärimise ajal.

Olgem tõeline elu näide, millel on kaks klassi, “konto klass” ja “säästukonto klass”. Siin saab „konto säästmise klassi“ pärida „konto klassi“ omaduse, seega muutub „konto klassi” klass baas- / super- / vanemklassi kontoklassi säästmiseks ja “säästukonto klass” on tuletatud klass.

Siin on "konto klassi" atribuudid acc_no (privaatne) ja saldo (avalik) ning liikmete funktsioonid on initsialiseeritud (), get_accno (), mis on avalikud. Nüüd, "konto klass" pärineb avalikult "säästukonto klassist", saab kõigile "konto klassi" avalikele liikmetele otse ligipääsu "säästukonto klassile". See võib juurdepääsu „konto klassi” eraliikmele „konto klassi” avaliku liikme funktsioonide kaudu, kuid ei pääse neile otse juurde.

Ühe pärimise rakendamine:

 # sisaldab nime ruumi std; klassi konto {int acc_no, ; avalik: ujuv saldo; tühine initsialiseerimine (int x, int y) {acc_no = x; saldo = y; } int get_accno. () {return acc_no; }}; klass Saving_acc: avalik konto {float intrest_rate; avalik: // Saving_acc klassi konstruktor Saving_acc (int c) {interest_rate = c; } void display () {cout < 

Mitme pärandi määratlus

Mitmekordne pärimine võimaldab tuletatud klassil pärida rohkem kui ühe põhiklassi kombineeritud funktsioone, st meil on üks tuletatud klass ja mitu põhiklassi. Iga põhiklassi tuleb pärida, nimetades iga neist eraldi juurdepääsu spetsifikatsiooni. Saadud klass võib kasutada põhiklasside liikmeid, tuginedes juurdepääsu spetsifikatsioonile, mille alusel põhiklass pärineb.

Võimaldab näidise abil lihtsam olla kolme klassi, st jalgrattaga, autoga ja sõidukiga. Nüüd saab “Sõiduk” pärida nii „Bike“ kui ka „Car” omadusi. Niisiis muutub “Sõiduk” tuletatud klassiks ja “Bike” ja “Car” muutub baasklassiks. Nüüd on "Sõiduk" avalikult päritud "Bike" ja "Car", mis võimaldab ligipääsu kõigile "Bike" ja "Car" avalikele liikmetele, kuid kuna meil on üksus Model_no, mis on kaitstud autos, nii et see on autole privaatne, kuid see võib olla autole privaatne. "Sõiduk".

Mitme pärandi rakendamine:

 # sisaldab nimeruumi std; klass Bike {int engine_cost; ; avalik: void set_engine_cost (int x) {engine_cost = x; }}; klassi auto {kaitstud: int Model_no; avalik: void set_Model_no (int p) {Model_no = p; }}; klass Sõidukid: avalik Bike, avalik auto {int no_of_wheels avalik: vehical (int w) {no_of_wheels = w; cout << "rataste puudumine" < 

Peamised erinevused ühe ja mitme pärandi vahel

  1. Ühekordne pärand on üks tuletatud klass, millel on üks põhiklass, samas kui mitmekordsel pärandil on kaks või enam kui kaks põhiklassi, kuid ühekordne tuletatud klass.
  2. Mitmekordne pärimine on üsna segane, sest siin pärineb üks tuletatud klass kahest või enamast põhiklassist. Kui baasklassidel on atribuut või funktsioon, millel on sama nimi kui tuletatud klassi jaoks, on raske tuvastada, milline põhiklassi atribuut või funktsioon see on.
  3. Ühe pärimise korral on üldkulud väiksemad. Kuid mitmekordse pärimise korral viitab objekti konstrueerimine või hävitamine vanemklassi konstruktoritele ja hävitajale klassi hierarhias, mis suurendab üldkulusid.
  4. Üksik pärand on pigem spetsialiseerumine. Mitmekordne pärimine on pigem üldistamise suunas.
  5. Kuna ühe pärandiga on vähem üldkulusid, on neil vähem käitusaega võrreldes mitme pärandiga.

Järeldus

Pärand muudab programmeerija töö lihtsaks, sest kui üks klass on juba moodustatud, saab selle funktsioone vajadusel kohandada. Kuigi juurdepääsu spetsifikatsioon piirab juurdepääsu põhiklassi liikmetele teatud viisil, kuid see muudab andmete turvalisuse. Üksik pärand on kuidagi lihtsam ja lihtsam rakendada kui mitmekordne pärimine. Pärand vähendab objektikoodi suurust, kuid mõjutab ka programmi käivitamise aega.

Top