Diferència entre la funció virtual i la virtual

Autora: Laura McKinney
Data De La Creació: 2 Abril 2021
Data D’Actualització: 13 Ser Possible 2024
Anonim
Diferència entre la funció virtual i la virtual - Tecnologia
Diferència entre la funció virtual i la virtual - Tecnologia

Content


La funció virtual i la funció virtual pura són tots dos conceptes del polimorfisme en temps d'execució. La diferència principal entre "funció virtual ” i "Funció virtual pura" és que la "funció virtual" té la seva definició a la classe base i també la redefineixen les classes derivades heretadores. La funció virtual pura no té definició a la classe base i totes les classes derivades heretadores han de redefinir-la.

Tot i això, la funció virtual també es denomina despatx dinàmic i despatx en temps d'execució, ja que la funció anomenada s'especifica en el temps d'execució d'acord amb el tipus d'objecte utilitzat.

El polimorfisme és compatible amb els idiomes C ++ i Java. A Java, el terme "overriding" s'utilitza en lloc de "funció virtual", ja que la funció virtual és el terme de C ++.


  1. Gràfic de comparació
  2. Definició
  3. Diferències claus
  4. Conclusió

Gràfic de comparació

Bases per a la comparacióFunció virtualFunció virtual pura
BàsicLa funció virtual té la seva definició a la classe base.La funció virtual pura no té definició a la classe base.
Declaraciónom de funció virtual (paràmetre_list) {. . . . .};nom de funció virtual (paràmetre_lista) = 0;
Classe derivadaTotes les classes derivades poden o no anul·lar la funció virtual de la classe base.Totes les classes derivades han de substituir la funció virtual de la classe base.
Efecte

Les funcions virtuals són de naturalesa jeràrquica; no afecta la compilació si cap classe derivada no anul·la la funció virtual de la classe base.Si totes les classes derivades no anul·len la funció virtual de la classe base, es produirà un error de compilació.
Classe abstracteCap concepte.Si una classe conté almenys una funció virtual pura, es declara abstracta.


Definició de Funció Virtual

El funció virtual és la funció de membre de la classe base, i és redefinida per les classes derivades que hereta la classe base. No és necessari que totes les classes derivades heretadores hagin de redefinir la funció virtual, només la redefiniu aquelles classes derivades que puguin requerir el seu funcionament. Una funció virtual es crea mitjançant la declaració de la funció a la classe base precedida amb la paraula clau "Virtual".

Declaració:

class base {public: tipus virtual nom_fase (llista de paràmetres) {. . . }};

L'herència de les classes derivades pot redefinir la funció virtual sense cap paraula clau "virtual". Les classes derivades redefineixen la funció virtual per realitzar la seva tasca. Com que la funció virtual es redefineix en classes derivades, tenim diverses formes de la mateixa funció. Ara, la versió de la funció que s’anomena, depèn del tipus d’objecte a què es fa referència per invocar aquesta funció.

Herència multinivell

A l’herència multinivell, on una classe derivada que ha heretat la funció virtual de la seva classe base, quan s’utilitza ella mateixa com a classe base per a una altra classe derivada, la funció virtual encara pot ser anul·lada. De manera que, quan s'hereta una funció virtual, també s'hereta la seva naturalesa virtual.

Les funcions virtuals també són de naturalesa jeràrquica, és a dir, si una classe derivada no anul·la / redefineix la funció virtual heretada de la classe base i quan l’objecte de la classe derivada invoca aquesta funció virtual, llavors s’invoca la funció virtual definida per la classe base.

Definició de la funció virtual pura

Com s'ha vist anteriorment, si la classe derivada no anul·la la funció virtual, s'utilitza la funció virtual definida per la classe base. Però, i si la classe base no defineix la funció virtual. Moltes vegades, la classe base no té definició per a la funció virtual o, de vegades, voleu que totes les classes derivades hagin de substituir la funció virtual.

Per controlar aquestes situacions anteriors, C ++ recolza el concepte de "Funció virtual pura“. Es declara una "funció virtual pura" a la classe base però no té la seva definició a la classe base. La funció virtual pura es declara de la següent manera.

tipus virtual nom_funció (paràmetre_lista) = 0;

Sempre que una funció virtual de la classe base es fa "pura", cada classe derivada ha de substituir obligatòriament la funció virtual pura de la classe base. Si la classe derivada no substitueix la funció virtual pura de la classe base, es produirà un error de compilació.

Classe abstracte

La classe que conté almenys una funció pura s’anomena “classe abstracta”. No es poden crear objectes de classes abstractes, però podeu crear referències i apunts a classes abstractes. Es pot accedir als membres de les classes abstractes a través de l'objecte de les classes derivades que hereta la classe base abstracta.

Utilitzeu la paraula clau per a una classe que vulgueu declarar abstracte "Abstracte" davant de la "Classe" paraula clau.

// per exemple nombre de classe abstracte de classe {. . tipus virtual nom_funció (paràmetre_lista) = 0; . . };

  1. Les funcions virtuals es defineixen definitivament a la classe base i es redefineixen (anul·len) a la classe derivada. D'altra banda, la funció virtual pura de la classe base no es defineix particularment a la classe base
  2. Si es requereix, la classe derivada redefineix (anul·la) la funció virtual mentre que, en cas de funció virtual pura, la classe derivada ha de definir definitivament la funció virtual pura.
  3. Si la classe derivada no pot redefinir (anul·lar) la funció virtual, pot utilitzar la funció virtual de la classe base. Per contra, si una classe derivada no pot substituir la funció virtual pura, es produeix un error de compilació.
  4. La classe base que conté la funció virtual es pot instanciar, és a dir, es pot crear el seu objecte. En contraposició, la classe base que conté una funció virtual pura, és a dir, una classe abstracta no es pot instanciar, ja que una classe abstracta no està del tot definida.

Nota:
El prototip de la "funció virtual" i la "funció virtual pura" continua sent el mateix durant tot el programa.

Conclusió:

Les "funcions virtuals" i la "funció virtual pura" tenen la seva importància, ja que a les "funcions virtuals", tota classe derivada no necessita redefinir la funció virtual i on volem que tota la classe derivada redefinís la funció virtual, virtual pura. la funció s’aplica millor allà.