Vertailukaavio
Vertailun perusteet | Yksittäinen perintö | Useita perintöä |
---|---|---|
perustiedot | Johdettu luokka perii yhden perusluokan. | Johdettu luokka perii kaksi tai useampia kuin kaksi perusluokkaa. |
täytäntöönpano | Luokan johdettu luokka: access_specifier-perusluokka | Luokan johdettu _class: access_specifier base_class1, access_specifier base_class2, .... |
Pääsy | Johdettu luokka käyttää yksittäisen perusluokan ominaisuuksia | Johdettu luokka pääsee periytyvien perusluokkien yhdistettyihin ominaisuuksiin |
näkyvyys | Julkinen, Yksityinen, Suojattu | Julkinen, Yksityinen, Suojattu |
Suoritusaika | Edellyttää pientä määrää ajoaikaa | Vaadi ylimääräisiä runtime overheadia yksittäiseen perintöön verrattuna |
Yksittäisen perintön määritelmä
Yksittäisessä perinnössä on yksi perusluokka ja yksi johdettu luokka. Johdettu luokka perii perusluokan joko julkisesti, suojatusti ja yksityisesti. Perusluokan jäseniä voi käyttää johdetun luokan perusteella perusluokan perinnän aikana määriteltyyn pääsymääritykseen.
Olkaamme todellinen elämän esimerkki, jossa on kaksi luokkaa, ”tililuokka” ja ”säästötilin luokka”. Täällä ”säästötililuokka” voi periä ”tililuokan” ominaisuuden, joten ”tililuokan” luokka muuttuu perustilaan / super / vanhempaan luokkaan tallennustililuokkaa varten, ja ”säästötililuokka” on johdettu luokka.
Täällä "tililuokan" määritteet ovat acc_no (yksityinen) ja saldo (julkinen), ja jäsenfunktiot ovat alustavia (), get_accno (), jotka ovat julkisia. Nyt "tililuokka" periytyy julkisesti "säästötilin luokalle", joten kaikki "tililuokan" julkiset jäsenet voivat käyttää suoraan "säästötilin luokkaa". Se voi käyttää "tililuokan" yksityistä jäsentä "tililuokan" julkisten jäsentoimintojen kautta, mutta ei voi käyttää niitä suoraan.
Yksittäisen perintön toteuttaminen:
# sisältää nimitilan std; luokka-tili {int acc_no, ; julkinen: float-saldo; void initialize (int x, int y) {acc_no = x; rahoitusasema = y; } int get_accno. () {return acc_no; }}; class Saving_acc: public Account {float intrest_rate; public: // Saving_acc luokka Saving_acc (int c) {interest_rate = c; } void display () {cout <Määritelmä usean perintönä
Useiden perintöjen ansiosta johdettu luokka voi periä useamman kuin yhden perusluokan yhdistettyjä ominaisuuksia eli meillä on yksi johdettu luokka ja useita perusluokkia. Jokainen perusluokka on perittävä mainitsemalla jokaisen niistä erillinen pääsy-määritys. Johdettu luokka voi käyttää perusluokkien jäseniä tukiaseman perusteella, jolla perusluokka on peritty.
Otamme esimerkin avulla helpommaksi kolme luokkaa eli pyörä, auto ja ajoneuvo. Nyt "Ajoneuvo" voi periä sekä "pyörän" että "auton" ominaisuudet. Niinpä "Ajoneuvo" tulee johdettuun luokkaan ja "Bike" ja "Car" tulevat perusluokkaan. Nyt "Bike" ja "Car" ovat yleisesti perineet "Vehicle" -periaatteella, ja se voi käyttää kaikkia "Bike" ja "Car" julkisia jäseniä, mutta koska meillä on malli Model_no suojattu "Car" -laitteella, niin että se on yksityinen autolle, mutta se voi olla "Ajoneuvo".
Useiden perintöjen toteuttaminen:
# sisältää nimiavaruuden std; luokka Bike {int engine_cost; ; julkinen: void set_engine_cost (int x) {engine_cost = x; }}; luokan auto {suojattu: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; luokka Ajoneuvollinen: julkinen Bike, julkinen auto {int no_of_wheels julkinen: vehical (int w) {no_of_wheels = w; cout << "ei pyöriä" <Yksittäisen ja moninkertaisen perinnön väliset keskeiset erot
- Yksittäinen perintö on yksi johdettu luokka, jolla on yksi perusluokka, kun taas useassa perinnössä on kaksi tai useampi kuin kaksi perusluokkaa, mutta yksi johdettu luokka.
- Useampi perintö on melko hämmentävää, koska tässä yksi ainoa johdettu luokka peri kaksi tai useampia perusluokkia. Jos perusluokissa on sama nimi tai attribuutti kuin johdettuun luokkaan, on vaikeaa tunnistaa, minkä perus- luokan attribuutin tai funktion se on johdettava.
- Yleiskustannukset ovat pienempiä yksittäisen perinnön yhteydessä. Mutta jos perintö on moninkertainen, objektin rakentaminen tai tuhoaminen vie vanhemman luokan konstruktoreita ja tuhoajan luokan hierarkiassa, joka lisää yläpuolta.
- Yksi perintö on enemmän erikoistumista. Useampi perintö on enemmän yleistymiseen.
- Koska yksittäisellä perinnöllä on vähemmän yleiskustannuksia, sillä on vähemmän käyntiaikaa verrattuna useaan perintöön.
johtopäätös
Perintö tekee ohjelmoijan työstä helppoa, sillä jos yksi luokka on jo muodostettu, sen ominaisuuksia voidaan muokata tarvittaessa. Vaikka pääsyn määrittäjä rajoittaa pääsyä perusluokan jäseniin tietyllä tavalla, mutta se tekee datasta turvallisemman. Yksittäinen perintö on jotenkin yksinkertaisempi ja helpompi toteuttaa kuin moninkertainen perintö. Perintö vähentää objektikoodin kokoa, mutta vaikuttaa myös ohjelman ajoaikaan.