Suositeltava, 2024

Toimituksen Valinta

Ero yhden ja monen perinnön välillä

Perintö tukee vahvasti uudelleenkäytettävyyden käsitettä eli uusi luokka käyttää uudelleen jo olemassa olevien ominaisuuksia. Access-määrittelijä päättää, miten perus- luokan jäsen periytyy johdetusta luokasta. On monia tapoja saavuttaa perintö, yksi, useita, hierarkkinen, monitasoinen, hybridi. Keskeinen keskustelunaiheemme on yksittäisen ja moninkertaisen perinnön välinen ero. Yksittäisessä perinnössä meillä on vain yksi perusluokka, jonka peri vain yksi johdettu luokka. Useissa perinnöissä meillä on enemmän kuin kaksi perusluokkaa, jotka periytyvät vain yhdestä johdetusta luokasta.


Vertailukaavio

Vertailun perusteetYksittäinen perintöUseita perintöä
perustiedotJohdettu luokka perii yhden perusluokan.Johdettu luokka perii kaksi tai useampia kuin kaksi perusluokkaa.
täytäntöönpanoLuokan johdettu luokka: access_specifier-perusluokkaLuokan johdettu _class: access_specifier base_class1, access_specifier base_class2, ....
Pääsy
Johdettu luokka käyttää yksittäisen perusluokan ominaisuuksiaJohdettu luokka pääsee periytyvien perusluokkien yhdistettyihin ominaisuuksiin
näkyvyysJulkinen, Yksityinen, SuojattuJulkinen, Yksityinen, Suojattu
SuoritusaikaEdellyttää pientä määrää ajoaikaaVaadi 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

  1. 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.
  2. 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.
  3. 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.
  4. Yksi perintö on enemmän erikoistumista. Useampi perintö on enemmän yleistymiseen.
  5. 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.

Top