Razlika med navidezno in čisto navidezno funkcijo

Avtor: Laura McKinney
Datum Ustvarjanja: 2 April 2021
Datum Posodobitve: 4 Maj 2024
Anonim
Электробритвы Филипс. Эволюция поколений за 10 лет. Philips HQ7830, HQ8250, S9000 S9041, NL9260.
Video.: Электробритвы Филипс. Эволюция поколений за 10 лет. Philips HQ7830, HQ8250, S9000 S9041, NL9260.

Vsebina


Navidezna funkcija in čista virtualna funkcija sta pojma polimorfizma časa delovanja. Glavna razlika med „navidezna funkcija " in "Čista virtualna funkcija" je, da ima "virtualna funkcija" svojo definicijo v osnovnem razredu in jo podedovani izvedeni razredi na novo definirajo. Čista virtualna funkcija v osnovnem razredu nima definicije in vsi podedovani izvedeni razredi jo morajo na novo definirati.

Toda navidezno funkcijo imenujemo tudi kot dinamična odprema in odpošiljanje med izvajanjem, ker je imenovana funkcija določena v času izvajanja v skladu z vrsto uporabljenega predmeta.

Polimorfizem podpirata oba jezika C ++ in Java. V Javi se namesto "virtualne funkcije" uporablja izraz "preglasitev", kot virtualna funkcija pa je izraz C ++.

  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Zaključek

Primerjalna tabela

Osnove za primerjavoNavidezna funkcijaČista navidezna funkcija
OsnovniVirtualna funkcija ima svojo definicijo v osnovnem razredu.Čista navidezna funkcija v osnovnem razredu nima definicije.
Izjavavirtualno ime_nastavitve (ime_parametra) {. . . . .};virtualno ime_nastavitve (ime_parametra) = 0;
Izpeljani razredVsi izvedeni razredi lahko ali ne smejo preglasiti virtualne funkcije osnovnega razreda.Vsi izvedeni razredi morajo preglasiti virtualno funkcijo osnovnega razreda.
Učinek

Navidezne funkcije so hierarhične narave; ne vpliva na kompilacijo, če kateri koli izvedeni razredi ne preglasijo virtualne funkcije osnovnega razreda.Če vsi izvedeni razredi ne preglasijo navidezne funkcije osnovnega razreda, bo prišlo do napake kompilacije.
IzvlečekBrez koncepta.Če razred vsebuje vsaj eno čisto virtualno funkcijo, se razglasi za abstraktno.


Opredelitev navidezne funkcije

The navidezna funkcija je članska funkcija osnovnega razreda in jo na novo definirajo izpeljani razredi, ki podedujejo osnovni razred. Ni nujno, da morajo vsi podedovani izvedeni razredi redefinirati virtualno funkcijo, ampak jih na novo definirajo le tisti izpeljani razredi, ki lahko zahtevajo njegovo delovanje. Navidezna funkcija je ustvarjena z deklariranjem funkcije v osnovnem razredu pred ključno besedo "Virtualno".

Izjava:

osnova razreda {public: virtualni tip funt_name (seznam parametrov) {. . . }};

Podedovani izvedeni razredi lahko na novo določijo virtualno funkcijo brez „virtualne“ ključne besede. Izvedeni razredi na novo definirajo navidezno funkcijo, da izpolni svojo nalogo. Ko je virtualna funkcija na novo definirana v izvedenih razredih, imamo več oblik iste funkcije. Zdaj, katera različica funkcije se imenuje, je odvisno od vrste predmeta, ki se sklicuje na to funkcijo.


Večstopenjsko dedovanje

V večstopenjskem dedovanju, kjer izpeljani razred, ki je navidezno funkcijo podedoval od svojega osnovnega razreda, kadar se sam uporablja kot osnovni razred za drug izpeljani razred, lahko navidezno funkcijo še vedno preglasimo. Ko je virtualna funkcija podedovana, se deduje tudi navidezna narava.

Virtualne funkcije so tudi hierarhične narave, to je, če izpeljani razred ne preglasi / na novo definira navidezne funkcije, podedovane iz osnovnega razreda, in kadar objekt izpeljanega razreda pokliče to virtualno funkcijo, se nato prikliče navidezna funkcija, ki jo določi osnovni razred.

Opredelitev čiste navidezne funkcije

Kot je razvidno zgoraj, če izpeljani razred ne preglasi navidezne funkcije, se uporabi navidezna funkcija, ki jo določi osnovni razred. Kaj pa, če osnovni razred sam ne definira navidezne funkcije. Velikokrat osnovni razred nima definicije za navidezno funkcijo ali včasih želite, da vsi izvedeni razredi preglasijo virtualno funkcijo.

Za obvladovanje zgornjih dveh situacij C ++ podpira koncept „Čista navidezna funkcija". Čista navidezna funkcija je navedena v osnovnem razredu, vendar v osnovnem razredu nima njene definicije. Čista navidezna funkcija je razglašena na naslednji način.

navidezni tip funct_name (parameter_list) = 0;

Kadar koli je virtualna funkcija v osnovnem razredu "čista", mora vsak izvedeni razred obvezno preglasiti čisto virtualno funkcijo osnovnega razreda. Če izpeljani razred ne preglasi čisto virtualne funkcije osnovnega razreda, bo to prišlo do napake pri sestavljanju.

Izvleček

Razred, ki vsebuje vsaj eno čisto funkcijo, se imenuje "abstraktni razred". Ni mogoče ustvariti nobenih predmetov abstraktnih razredov, lahko pa ustvarite reference in kazalce na abstraktne razrede. Do članov abstraktnih razredov lahko dostopate prek predmeta izpeljanih razredov, ki podeduje abstraktni osnovni razred.

Razred, ki ga želite razglasiti za abstraktni, uporabite ključno besedo "Abstraktno" pred "Razred" ključna beseda.

// na primer abstraktni razred-ime {. . navidezni tip funct_name (parameter_list) = 0; . . };

  1. Navidezne funkcije so vsekakor opredeljene v osnovnem razredu in na novo definirane (preglasijo) v izpeljanem razredu. Po drugi strani pa čista virtualna funkcija osnovnega razreda v osnovnem razredu še posebej ni definirana
  2. Izvedeni razred, če je potrebno na novo definirati (preglasiti) virtualno funkcijo, medtem ko mora v primeru čiste virtualne funkcije izpeljani razred zagotovo na novo definirati čisto virtualno funkcijo.
  3. Če izpeljani razred ne na novo opredeli (preglasi) virtualne funkcije, lahko uporabi navidezno funkcijo osnovnega razreda. Če pa izpeljani razred ne preglasi čiste virtualne funkcije, potem pride do napake kompilacije.
  4. Bazni razred, ki vsebuje virtualno funkcijo, je mogoče sprožiti, tj. Lahko se ustvari njegov objekt. Nasprotno pa osnovnega razreda, ki vsebuje čisto virtualno funkcijo, tj. Abstraktnega razreda ni mogoče instancirati, saj abstraktni razred ni popolnoma definiran.

Opomba:
Prototip „virtualne funkcije“ in „čiste virtualne funkcije“ ostaja isti v celotnem programu.

Zaključek:

Obe „virtualni funkciji“ in „čisti navidezni funkciji“ imata svoj pomen, tako kot pri „virtualnih funkcijah“ vsem izpeljanim razredom ni treba na novo definirati navidezne funkcije in kjer želimo, da bi vsi izpeljani razred na novo definirali navidezno funkcijo, čisto virtualno funkcija najbolje velja tam.