Diferencia entre la función virtual virtual y la pura

Autor: Laura McKinney
Fecha De Creación: 2 Abril 2021
Fecha De Actualización: 13 Mayo 2024
Anonim
Diferencia entre la función virtual virtual y la pura - Tecnología
Diferencia entre la función virtual virtual y la pura - Tecnología

Contenido


La función virtual y la función virtual pura son conceptos del polimorfismo de tiempo de ejecución. La principal diferencia entre ‘función virtual " y "Función virtual pura" es que la "función virtual" tiene su definición en la clase base y también las clases derivadas heredantes la redefinen. La función virtual pura no tiene definición en la clase base, y todas las clases derivadas heredadas tienen que redefinirla.

Sin embargo, la función virtual también se llama como despacho dinámico y despacho en tiempo de ejecución, debido a que la función llamada se especifica en el tiempo de ejecución de acuerdo con el tipo de objeto utilizado.

El polimorfismo es compatible con los lenguajes C ++ y Java. En Java, el término "anulación" se utiliza en lugar de "función virtual", ya que la función virtual es el término de C ++.


  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparaciónFunción virtualFunción virtual pura
BASICLa función virtual tiene su definición en la clase base.La función virtual pura no tiene definición en la clase base.
Declaraciónnombre_función virtual (lista_parámetros) {. . . . .};nombre_función virtual (lista_parámetros) = 0;
Clase derivadaTodas las clases derivadas pueden o no anular la función virtual de la clase base.Todas las clases derivadas deben anular la función virtual de la clase base.
Efecto

Las funciones virtuales son de naturaleza jerárquica; no afecta la compilación si alguna clase derivada no anula la función virtual de la clase base.Si todas las clases derivadas no pueden anular la función virtual de la clase base, se producirá el error de compilación.
Clase abstractaSin conceptoSi una clase contiene al menos una función virtual pura, se declara abstracta.


Definición de función virtual

los función virtual es la función miembro de la clase base, y es redefinida por las clases derivadas que heredan la clase base. No es necesario que todas las clases derivadas heredadas deban redefinir la función virtual, solo las redefinen las clases derivadas que pueden requerir su funcionamiento. Se crea una función virtual al declarar la función en la clase base precedida por la palabra clave 'virtual'.

Declaración:

class base {public: virtual type funt_name (lista de parámetros) {. . . }};

Las clases derivadas heredadas pueden redefinir la función virtual sin ninguna palabra clave "virtual". Las clases derivadas redefinen la función virtual para cumplir su tarea. Como la función virtual se redefine en clases derivadas, tenemos múltiples formas de la misma función. Ahora, qué versión de la función se llama, depende del tipo de objeto que se invoque para invocar esa función.

Herencia multinivel

En la herencia multinivel, donde una clase derivada que ha heredado la función virtual de su clase base, cuando se utiliza como clase base para otra clase derivada, la función virtual aún puede anularse. Entonces, cuando se hereda una función virtual, también se hereda su naturaleza virtual.

Las funciones virtuales también son de naturaleza jerárquica, es decir, si una clase derivada no anula / redefine la función virtual heredada de la clase base y cuando el objeto de la clase derivada invoca esa función virtual, se invoca la función virtual definida por la clase base.

Definición de función virtual pura

Como se vio anteriormente, si la clase derivada no anula la función virtual, entonces se utiliza la función virtual definida por la clase base. Pero, ¿qué pasa si la clase base en sí misma no define la función virtual? Muchas veces, la clase base no tiene una definición para la función virtual, o algunas veces desea que todas las clases derivadas deban anular la función virtual.

Para manejar estas dos situaciones anteriores, C ++ admite el concepto de "Función virtual pura". Una "función virtual pura" se declara en la clase base pero no tiene su definición en la clase base. La función virtual pura se declara de la siguiente manera.

tipo virtual nombre_función (lista_parámetros) = 0;

Siempre que una función virtual en la clase base se haga "pura", cada clase derivada debe anular obligatoriamente la función virtual pura de la clase base. Si la clase derivada no puede anular la función virtual pura de la clase base, dará como resultado un error de compilación.

Clase abstracta

La clase que contiene al menos una función pura se llama "clase abstracta". No se pueden crear objetos de clases abstractas, pero puede crear referencias y punteros a clases abstractas. Se puede acceder a los miembros de las clases abstractas a través del objeto de las clases derivadas que hereda la clase base abstracta.

Una clase que desea declarar abstracta, use la palabra clave 'abstracto' en frente de 'clase' palabra clave.

// por ejemplo, clase abstracta nombre-clase {. . tipo virtual nombre_función (lista_parámetros) = 0; . . };

  1. Las funciones virtuales se definen definitivamente en la clase base y se redefinen (anulan) en la clase derivada. Por otro lado, la función virtual pura de la clase base no está particularmente definida en la clase base
  2. Si es necesario, la clase derivada redefine (anula) la función virtual, mientras que, en el caso de la función virtual pura, la clase derivada debe redefinir definitivamente la función virtual pura.
  3. Si la clase derivada no puede redefinir (anular) la función virtual, puede usar la función virtual de la clase base. Por el contrario, si una clase derivada no puede anular la función virtual pura, se produce un error de compilación.
  4. La clase base que contiene la función virtual se puede instanciar, es decir, se puede crear su objeto. Por el contrario, la clase base que contiene una función virtual pura, es decir, una clase abstracta no puede ser instanciada ya que una clase abstracta no está completamente definida.

Nota:
El prototipo de la "función virtual" y la "función virtual pura" sigue siendo el mismo en todo el programa.

Conclusión:

Las 'funciones virtuales' y la 'función virtual pura' tienen su importancia, ya que en las 'funciones virtuales', todas las clases derivadas no necesitan redefinir la función virtual y donde queremos que todas las clases derivadas redefinan la función virtual, virtual pura La función se aplica mejor allí.