Suositeltava, 2024

Toimituksen Valinta

Perinteen ja polymorfismin välinen ero

Perintö sallii, koodin uudelleenkäytettävyys ja polymorfismi, yhden toiminnon esiintyminen eri muodolla. Perinteinen ero perintön ja polymorfismin välillä on, että perintö mahdollistaa jo olemassa olevan koodin uudelleenkäytön ohjelmassa, ja polymorfismi tarjoaa mekanismin, jonka avulla voidaan dynaamisesti päättää, mitä funktion muotoa haetaan.

Vertailukaavio

Vertailun perusteetperintöpolymorfismi
perustiedotPerintö luo uuden luokan käyttämällä jo olemassa olevan luokan ominaisuuksia.Polymorfismi on pohjimmiltaan yhteinen rajapinta useille muodoille.
täytäntöönpanoPerintö toteutetaan periaatteessa luokissa.Polymorfismi toteutetaan periaatteessa funktiolla / menetelmillä.
KäyttääOOP: n uudelleenkäytettävyyden käsitteen tukeminen ja koodin pituuden vähentäminen.Mahdollistaa objektin päättää, mitä funktion muotoa kutsutaan, kun kääntymisaikana (ylikuormitus) sekä ajoaikana (ohittaminen).
LomakkeetPerintö voi olla yksi perintö, moninkertainen perintö, monitasoinen perintö, hierarkkinen perintö ja hybridiperintö.Polymorfismi voi olla kääntymisajan polymorfismi (ylikuormitus) tai ajoaikapolymorfismi (ohittaminen).
esimerkkiLuokan "pöytä" voi periä luokan "huonekalut", koska "pöytä" on "huonekalut".Luokalla 'study_table' voi olla myös funktio "set_color ()" ja luokalla "Dining_table" voi olla myös funktio "set_color ()", joten mikä tahansa set_color () - funktion muoto, josta haluat vedota, voidaan päättää molemmista, koota aikaa ja ajoaika.

Perintöominaisuuden määritelmä:

Perintö on yksi OOP: n keskeisistä piirteistä, jotka tukevat voimakkaasti uudelleenkäytettävyyttä. Uudelleenkäytettävyyttä voitaisiin kuvata uuden luokan luomiseksi käyttämällä uudelleen olemassa olevan luokan ominaisuuksia. Perinnössä on perusluokka, joka periytyy johdetusta luokasta. Kun luokka perii minkä tahansa toisen luokan, perusluokan jäsen (t) tulee johdetun luokan jäseneksi (jäseniksi).

Luokan perintämuoto on seuraava:

 luokan johdettu-luokka-nimi: pääsy-määrittelijä -luokka-nimi {// luokan luokka}; 

Tällöin pääsy-määrittäjä tarjoaa pääsymuodon (yksityinen, julkinen, suojattu) perus- luokan jäsenelle (jäsenille) johdetulle luokalle. Jos yhtään käyttöoikeusmääritintä ei ole, sitä pidetään oletuksena yksityisenä. C ++: ssa, jos johdettu luokka on "struct", pääsymääritys on oletusarvoisesti "julkinen".

C ++: ssa perintö voidaan saavuttaa viidellä lomakkeella. Ne voidaan luokitella seuraavasti: -

  • Yksittäinen perintö (vain yksi superluokka)
  • Useampi perintö (useat luokat)
  • Hierarkkinen perintö (yksi superluokka, monet alaluokat)
  • Useampi perintö (johdettu johdetusta luokasta)

Java: ssa luokka perii toisen luokan käyttämällä avainsanaa "laajentaa". Java: ssa perusluokkaa kutsutaan superluokaksi, ja johdettu luokka kutsutaan alaluokaksi. Alaluokka ei voi käyttää niitä perusluokan jäseniä, jotka julistetaan "yksityisiksi". Yleinen lomake, joka perii luokan Java, on seuraavanlainen.

 luokan johdettu-luokka-nimi laajentaa perusluokan nimeä {// luokan luokka}; 

Java ei tue usean perinnön perintöä, kun taas se tukee monitasoista hierarkiaa. Javaissa joskus superluokka saattaa haluta piilottaa sen toteutuksen yksityiskohdat, ja se tekee osan tiedoista "yksityiseksi". Kuten Java: ssa, alaluokka ei voi käyttää superluokan yksityisiä jäseniä, ja jos alaluokka haluaa käyttää tai alustaa kyseisiä jäseniä, Java tarjoaa ratkaisun. Alaluokka voi ohjata sen välittömän ylemmän luokan jäseniä käyttämällä avainsanaa "super". Muista, että voit käyttää vain välittömän superluokan jäseniä.

"Super": lla on kaksi yleistä muotoa. Ensimmäinen on se, että se kutsuu superluokan rakentajaa. Toinen on pääluokan jäsenen piilotetun superklassin jäsenen käyttäminen.

 // ensimmäinen muoto rakentajan kutsumiseen. luokka supper_class {supper_class (argument_list) {..} // superluokan rakentaja}; class sub_class laajentaa supper_class {sub_class (argument_list) {..} // sub_class super-konstruktorin (argument_list); // sub_class kutsuu superluokan konstruktoria}}; 
 // toinen super-luokan supper_class {int i; } class sub_class laajentaa supper_class {int i; alaluokka (int a, int b) {super.i = a; // 'i' superluokasta i = b; // 'i' alaluokasta}}; 

Polymorfismin määritelmä

Termi polymorfismi tarkoittaa yksinkertaisesti "yhtä funktiota, useita muotoja". Polymorfismi saavutetaan sekä koontiaikana että ajoaikana. Kompilointiajan polymorfismi saavutetaan "ylikuormituksella", kun taas ajoaikapolymorfismi saavutetaan "ylittämällä".

Polymorfismi sallii objektin päättää, millä tavalla funktio haetaan, kun molemmat, koota aikaa ja ajoaikaa.
Keskustellaan ensimmäisestä ylikuormituksen käsitteestä. Ylikuormituksessa määritellään funktio luokassa useammin kuin kerran erilaisilla tietotyypeillä ja parametrien määrällä, kun taas ylikuormitettavalla toiminnolla on oltava sama palautustyyppi. Useimmiten ylikuormitetut toiminnot ovat luokan rakentajia.

 luokan ylikuormitus {int a, b; julkinen: int ylikuormitus (int x) {// ensimmäinen ylikuormitus () konstruktori a = x; palaa a; } int ylikuormitus (int x, y y) {// toinen ylikuormitus () konstruktori a = x; b = y; palauta a * b; }}; int main () {ylikuormitus O1; O1.overload (20); // ensimmäinen ylikuormituksen () rakentajan puhelu O1.overload (20, 40); // toinen ylikuormitus () rakentajan puhelu} 

Nyt keskustellaan toisesta polymorfismin muodosta, eli tärkeimmistä. Korvauksen käsite voidaan toteuttaa vain sellaisten luokkien funktiona, jotka myös toteuttavat perinnön käsitteen. C ++: ssa ohitettava toiminto edeltää avainsanan "virtuaalinen" perusluokassa ja määritellään uudelleen johdetussa luokassa samalla prototyypillä lukuun ottamatta avainsanaa "virtuaalinen".

 class base {public: virtual void funct () {// virtuaalitoiminto perusluokkaan cout << "Tämä on perusluokan funktio (); }}; luokka johdettu1: public base {public: void funct () {// perusluokan virtuaalitoiminto, joka on määritelty uudelleen johdetun1 luokan luokassa 

Perinteiset erot perintö- ja polymorfismin välillä

  1. Perintö luo luokan, joka luo sen ominaisuuden jo olemassa olevasta luokasta. Toisaalta polymorfismi on rajapinta, joka voidaan määritellä useissa muodoissa.
  2. Perintö toteutetaan luokissa, kun taas polymorfismi toteutetaan menetelmillä / toiminnoilla.
  3. Koska perintö antaa johdetulle luokalle mahdollisuuden käyttää perusluokassa määriteltyjä elementtejä ja menetelmiä, johdetun luokan ei tarvitse määritellä näitä elementtejä tai menetelmiä uudelleen niin, että voimme sanoa, että se lisää koodin uudelleenkäytettävyyttä ja siten vähentää koodin pituutta . Toisaalta polymorfismi mahdollistaa sen, että esine voi päättää, minkälaisen menetelmän se haluaa vedota sekä koontiaikaan että ajoaikaan.
  4. Perintö voidaan luokitella yksittäiseksi perinnöksi, moninkertaiseksi perinnöksi, monitasoiseksi perinnöksi, hierarkkiseksi perinnöksi ja hybridiperinnöksi. Toisaalta polymorfismi luokitellaan ylikuormitukseksi ja ylivoimaiseksi.

johtopäätös:

Perintö ja polymorfismi ovat toisiinsa liittyviä käsitteitä, koska dynaaminen polymorfismi koskee luokkia, jotka myös toteuttavat perinnön käsitteen.

Top