Palyginimo diagrama
Palyginimo pagrindas | Pavienis paveldėjimas | Keli paveldėjimas |
---|---|---|
Pagrindinis | Išvestinė klasė paveldi vieną pagrindinę klasę. | Išvestinė klasė paveldi dvi ar daugiau nei dvi bazines klases. |
Įgyvendinimas | Klasės išvestinė klasė: access_specifier bazinė klasė | Klasės išvestinė _class: access_specifier base_class1, access_specifier base_class2, .... |
Prieiga | Išvestinė klasė pasiekia vienos bazės klasės savybes | Išvestinė klasė pasiekia bendrą paveldėtų bazinių klasių savybes |
Matomumas | Vieša, privati, saugoma | Vieša, privati, saugoma |
Vykdymo laikas | Reikalauti nedidelio skaičiaus paleisties laiko virš galvos | Reikalauti papildomų prijungimo prie darbo laiko, palyginti su pavieniu paveldėjimu |
Pavienio paveldėjimo apibrėžimas
Vieno paveldėjimo atveju yra viena bazinė klasė ir viena išvestinė klasė. Išvestinė klasė paveldi bazinę klasę viešai, saugiai ir privačiai. Bazinės klasės nariams galima pasiekti išvestinę klasę pagal prieigos specifiką, nurodytą perimant bazinę klasę.
Turime tikrą gyvenimo pavyzdį, kuriame yra dvi klasės, „sąskaitos klasė“ ir „taupomosios sąskaitos klasė“. Čia „taupomosios sąskaitos klasė“ gali paveldėti „paskyros klasės“ savybę, taigi „paskyros klasės“ klasė taps bazine / super / tėvų klase taupant sąskaitos klasę, o „taupomosios sąskaitos klasė“ bus išvestinė klasė.
Čia „paskyros klasės“ atributai yra acc_no (privatūs) ir balansas (viešas), o narių funkcijos inicijuojamos (), get_accno (), kurios yra viešos. Dabar „sąskaitos klasė“ viešai vadinama „taupomosios sąskaitos klase“, todėl „viešosios sąskaitos klasės“ valstybinis narys gali būti tiesiogiai prieinamas „taupomosios sąskaitos klasei“. Jis gali prieiti prie privataus „paskyros klasės“ nario per „account class“ viešąsias nario funkcijas, bet negali jų tiesiogiai pasiekti.
Vienintelio paveldėjimo įgyvendinimas:
# apima pavadinimo vietos std; klasės paskyra {int acc_no, ; vieša: plūdės balansas; void inicializuoti (int x, int y) {acc_no = x; balansas = y; } int get_accno. () {return acc_no; }}; klasė Saving_acc: viešoji paskyra {float intrest_rate; public: // Saving_acc klasės Saving_acc konstruktorius (int c) {interest_rate = c; } void display () {cout <Kelių paveldėjimo apibrėžimas
Keli paveldėjimas leidžia išvestinei klasei paveldėti daugiau nei vienos bazinės klasės savybes, ty turime vienintelę išvestinę klasę ir kelias bazines klases. Kiekviena bazinė klasė turi būti paveldėta nurodant atskirą prieigos specifiką kiekvienam iš jų. Išvestinė klasė gali pasiekti bazinių klasių narius pagal prieigos specifiką, pagal kurį bazinė klasė yra paveldėta.
Leidžia lengviau su šiuo pavyzdžiu turėti tris klases, ty dviračius, automobilį ir transporto priemonę. Dabar „Transporto priemonė“ gali paveldėti „Bike“ ir „Car“ savybes. Taigi, „Transporto priemonė“ tampa išvestine klase, o „Bike“ ir „Car“ tampa pagrindine klase. Dabar „Bike“ ir „Car“ viešai paveldi „Vehicle“, jis gali pasiekti visus „Bike“ ir „Car“ viešuosius narius, tačiau, kadangi „Car“ yra apsaugotas subjektas Model_no, kad jis būtų privatus automobiliui, bet gali būti „Transporto priemonė“.
Kelių paveldėjimo įgyvendinimas:
# apima vardų erdvę std; klasės Bike {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; klasės automobilis {apsaugotas: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; klasė Transporto priemonės: viešasis dviratis, viešasis automobilis {int no_of_wheels viešas: automobilical (int w) {no_of_wheels = w; cout << "be ratų" <Pagrindiniai skirtumai tarp vieno ir kelių paveldėjimo
- Vienintelis paveldėjimas yra viena iš klasių, turinčių vieną bazinę klasę, o daugkartinio paveldėjimo atveju ji turi dvi ar daugiau nei dvi bazines klases, bet vienintelę išvestinę klasę.
- Keli paveldėjimas yra gana painus, nes čia vienintelė išvestinė klasė paveldi dvi ar daugiau pagrindinių klasių. Jei bazinės klasės turi atributą arba funkciją, turinčią tą patį pavadinimą, kaip ir išvestinei klasei, sunku nustatyti, kokią bazinės klasės atributą ar funkciją jis turi gauti.
- Bendrosios išlaidos yra mažesnės vieno paveldėjimo atveju. Tačiau, jei paveldėjimas vyksta kelis kartus, objekto statyba ar sunaikinimas sukelia patronuojančios klasės konstruktorius ir destruktorių klasės hierarchijoje, kuri padidina pridėtinę vertę.
- Vienas paveldėjimas yra labiau orientuotas į specializaciją. Kadangi daugkartinis paveldėjimas labiau susijęs su apibendrinimu.
- Kadangi pavienis paveldėjimas turi mažiau pridėtinės vertės, jis turi mažiau laiko, palyginti su daugkartiniu paveldėjimu.
Išvada
Paveldėjimas leidžia programuotojui dirbti lengvai, nes jei viena klasė jau yra suformuota, jos funkcijas galima pritaikyti kitiems, jei reikia. Nors prieigos specifikatorius tam tikru būdu apriboja prieigą prie bazinės klasės narių, tačiau jis tampa saugesnis. Pavienis paveldėjimas yra kažkaip paprastesnis ir lengviau įgyvendinamas nei daugkartinis paveldėjimas. Paveldėjimas sumažina objekto kodo dydį, bet taip pat veikia programos vykdymo laiką.