Diferencia entre la función virtual virtual y la pura
Contenido
- Cuadro comparativo
- Definición de función virtual
- Declaración:
- Herencia multinivel
- Definición de función virtual pura
- Clase abstracta
- Conclusión:
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 ++.
- Cuadro comparativo
- Definición
- Diferencias clave
- Conclusión
Cuadro comparativo
Bases para la comparación | Función virtual | Función virtual pura |
---|---|---|
BASIC | La 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ón | nombre_función virtual (lista_parámetros) {. . . . .}; | nombre_función virtual (lista_parámetros) = 0; |
Clase derivada | Todas 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 abstracta | Sin concepto | Si 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; . . };
- 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
- 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.
- 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.
- 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í.