Ero virtuaali- ja puhtaan virtuaalitoiminnon välillä

Kirjoittaja: Laura McKinney
Luomispäivä: 2 Huhtikuu 2021
Päivityspäivä: 13 Saattaa 2024
Anonim
Ero virtuaali- ja puhtaan virtuaalitoiminnon välillä - Tekniikka
Ero virtuaali- ja puhtaan virtuaalitoiminnon välillä - Tekniikka

Sisältö


Virtuaalifunktio ja puhdas virtuaalifunktio ovat molemmat käsitteet ajoajan polymorfismista. Tärkein ero "virtuaalitoiminto ” ja 'Puhdas virtuaalitoiminto' on se, että 'virtuaalifunktiolla' on määritelmä perusluokassa ja myös perivät johdetut luokat määrittelevät sen uudelleen. Puhtaalla virtuaalifunktiolla ei ole määritelmää perusluokassa, ja kaikkien perittyjen luokkien on määriteltävä se uudelleen.

Virtuaalitoimintoa kutsutaan kuitenkin myös dynaamiseksi lähetykseksi ja ajonaikaiseksi lähetykseksi, koska kutsuttu toiminto määritetään ajoajasta käytetyn objektin tyypin mukaisesti.

Polymorfismia tukevat sekä kielet C ++ että Java. Java-järjestelmässä termiä "ohittaminen" käytetään 'virtuaalitoiminnon' sijasta, koska virtuaalitoiminto on termi C ++.


  1. Vertailutaulukko
  2. Määritelmä
  3. Keskeiset erot
  4. johtopäätös

Vertailutaulukko

Vertailun perusteetVirtuaalitoimintoPuhdas virtuaalitoiminto
perustiedotVirtuaalitoiminnolla on määritelmä perusluokassa.Pure Virtual Function -toiminnolla ei ole määritelmää perusluokassa.
ilmoitusvirtuaalinen funct_name (parametriluettelo) {. . . . .};virtuaalinen funct_name (parametrilista) = 0;
Johdettu luokkaKaikki johdetut luokat saattavat olla ohittamatta kantaluokan virtuaalitoiminnon.Kaikkien johdettujen luokkien on korvattava perusluokan virtuaalitoiminto.
Vaikutus

Virtuaalitoiminnot ovat luonteeltaan hierarkkisia; Se ei vaikuta kokoamiseen, jos jokin johdettu luokka ei ohita kantaluokan virtuaalitoimintoa.Jos kaikki johdetut luokat eivät ohita perusluokan virtuaalifunktiota, tapahtuu käännösvirhe.
Tiivistelmä luokkaEi käsitettä.Jos luokka sisältää ainakin yhden puhtaan virtuaalifunktion, se julistetaan abstraktiksi.


Määritelmä Virtuaalitoiminto

virtuaalitoiminto on perusluokan jäsenfunktio, ja johdetut luokat määrittelevät sen uudelleen, joka perii perusluokan. Ei ole välttämätöntä, että kaikkien perittyjen johdettujen luokkien on määriteltävä uudelleen virtuaalitoiminto, sen määrittelevät vain ne johdetut luokat, jotka saattavat vaatia sen toimintaa. Virtuaalifunktio luodaan julistamalla toiminto avainsanan edessä olevaan perusluokkaan ’Virtuaalinen’.

Julistus:

luokan perusta {julkinen: virtuaalityyppi funt_name (parametriluettelo) {. . . }};

Perinteisillä johdettuilla luokilla voidaan määritellä virtuaalitoiminto uudelleen ilman mitään 'virtuaalista' avainsanaa. Johdetut luokat määrittelevät virtuaalitoiminnon uudelleen tehtävänsä suorittamiseksi. Koska virtuaalifunktio määritetään uudelleen johdettuissa luokissa, meillä on useita muotoja samasta toiminnosta. Nyt mitä toimintoversiota kutsutaan, riippuu siitä, millaiseen kohteeseen kutsutaan, että funktio käynnistetään.

Monitasoinen perintö

Monitasoisella perinnöllä, jossa johdettu luokka, joka on perinyt virtuaalitoiminnon perusluokastaan, kun itse sitä käytetään perustyyppinä toiselle johdetulle luokalle, virtuaalitoiminto voidaan silti ohittaa. Joten kun virtuaalinen toiminto periytyy, myös sen virtuaalinen luonne periytyy.

Virtuaalitoiminnot ovat myös luonteeltaan hierarkkisia, ts. Jos johdettu luokka ei ohita / määrittele uudelleen perusluokasta perittyä virtuaalitoimintoa ja kun johdetun luokan objekti vetoaa kyseiseen virtuaalitoimintoon, silloin kutsutaan kantaluokan määrittelemään virtuaalitoimintoon.

Määritelmä Pure Virtual Function

Kuten edellä on nähty, jos johdettu luokka ei ohita virtuaalitoimintoa, käytetään kantaluokan määrittelemää virtuaalifunktiota. Entä jos perusluokka ei itse määrittele virtuaalitoimintoa. Monta kertaa kantaluokalla ei ole määritelmää virtuaalitoiminnolle, tai joskus haluat, että kaikkien johdettujen luokkien on korvattava virtuaalitoiminto.

Näiden kahden edellä mainitun tilanteen käsittelemiseksi C ++ tukee ”Puhdas virtuaalitoiminto”. ”Puhdas virtuaalifunktio” julistetaan perusluokassa, mutta sillä ei ole määritelmää perusluokassa. Puhdas virtuaalifunktio julistetaan seuraavasti.

virtuaalityyppi funct_name (parametrilista) = 0;

Aina kun pohjaluokan virtuaalitoiminto tehdään ”puhtaana”, niin jokaisen johdetun luokan on pakollisesti korvattava kantaluokan puhdas virtuaalifunktio. Jos johdettu luokka ei ohita perusluokan puhdasta virtuaalitoimintoa, se johtaa käännösvirheeseen.

Tiivistelmä luokka

Luokkaa, joka sisältää ainakin yhden puhtaan funktion, kutsutaan 'abstraktiksi luokkaksi'. Abstraktien luokkien objekteja ei voida luoda, mutta voit luoda viitteitä ja osoittimia abstraktiluokkiin. Abstraktien luokkien jäseniin pääsee johdettujen luokkien objektin kautta, joka perii abstraktin perusluokan.

Luokka, jonka haluat julistaa abstraktiksi, käytä avainsanaa 'abstrakti' edessä ’Class’ avainsana.

// esimerkiksi abstrakti luokan luokanimi {. . virtuaalityyppi funct_name (parametrilista) = 0; . . };

  1. Virtuaalitoiminnot määritetään ehdottomasti perusluokassa ja määritetään uudelleen (ohitetaan) johdetussa luokassa. Toisaalta, puhdasta virtuaalitoimintoa, perusluokkaa ei erityisesti määritetä perusluokassa
  2. Johdettu luokka määrittelee uudelleen (ohittaa) virtuaalitoiminnon, kun taas puhtaan virtuaalitoiminnon tapauksessa johdetun luokan on ehdottomasti määriteltävä puhdas virtuaalifunktio.
  3. Jos johdettu luokka ei määrittele (ohita) virtuaalitoimintoa uudelleen, se voi käyttää kantaluokan virtuaalitoimintoa. Toisaalta, jos johdettu luokka ei ohita puhdasta virtuaalifunktiota, tapahtuu käännösvirhe.
  4. Virtuaalitoiminnon sisältävä kantaluokka voidaan toteuttaa, ts. Sen objekti voidaan luoda. Toisin kuin puhdasta virtuaalifunktiota sisältävää perusluokkaa, ts. Abstraktia luokkaa, ei voida hetkellistää, koska abstrakti luokka ei ole täysin määritelty.

merkintä:
'Virtuaalitoiminnon' ja 'puhtaan virtuaalitoiminnon' prototyyppi pysyy samana koko ohjelmassa.

johtopäätös:

'Virtuaalitoiminnoilla' ja 'puhtaalla virtuaalitoiminnolla' on molemmilla tärkeys, sillä 'virtuaalitoiminnoissa' kaikkien johdettujen luokkien ei tarvitse määritellä uudelleen virtuaalitoimintoa ja missä haluamme, että kaikkien johdettujen luokkien tulisi määritellä uudelleen virtuaalitoiminto, puhdas virtuaalinen toiminto soveltuu parhaiten sinne.