Una función virtual es una función miembro que se define en la clase base/clase principal y se vuelve a definir en la clase derivada. La función virtual permite llamar a la versión de clase derivada de la función utilizando la referencia o el puntero a la clase base.
Veamos algunos ejemplos para comprender el concepto de función virtual.
En el primer ejemplo, veremos el comportamiento de la función no virtual, y luego en el segundo ejemplo, explicaremos el comportamiento de una función virtual.
Ejemplo 1
En el siguiente código de ejemplo, tenemos dos clases: clase base y clase derivada.
La clase base tiene una función miembro, yo.mi., mostrar(). La clase derivada se hereda de la clase base y redefinió la función Display ().
Luego, hemos declarado un puntero al tipo de clase base y le hemos asignado un objeto de la clase derivada. Entonces, cuando llamamos a la función Display () usando el puntero de tipo de clase base, se llamará a la función de clase base. Puedes ver la salida a continuación.
Pero, en tales casos, C ++ proporciona una forma de llamar a la función de clase derivada al declarar la función de clase base como virtual. Veremos otro ejemplo para entender esto.
#incluir
usando el espacio de nombres STD;
clase base_class
público:
pantalla vacía ()
cout << "I am in Base class" << endl;
;
Clase Derived_class: public base_class
público:
pantalla vacía ()
cout << "I am in Derived class"regresar 0;
Ejemplo 2
En este ejemplo, hemos definido la función Display () como una función virtual en la clase base. La única diferencia del programa anterior es que hemos agregado una palabra clave virtual frente a "Void Display ()" en la clase base.
Ahora, si ve la salida, imprime: "Estoy en clase derivada", lo que indica que se llama la función de clase derivada.
La palabra clave virtual (función virtual) en la clase base es responsable de garantizar que la función correcta sea llamada para un objeto.
#incluir
usando el espacio de nombres STD;
clase base_class
público:
visualización virtual void ()
cout << "I am in Base class" << endl;
;
Clase Derived_class: public base_class
público:
pantalla vacía ()
cout << "I am in Derived class"regresar 0;
Ejemplo 3
Este es otro ejemplo de una función virtual. Como puede ver en el siguiente programa, hemos definido una clase base, yo.mi., Animal. Hay dos clases derivadas: perro y vaca. Hemos definido la función Eat () como virtual en la clase base, yo.mi., Animal. Luego hemos redefinido la función EAT () tanto en las clases derivadas, el perro como en la vaca. En la función main (), tenemos un puntero de la clase base, yo.mi., Animal, y luego adjuntó la clase derivada, perro. Entonces, cuando llamamos a la función Eat () usando el puntero de clase base, podemos invocar la versión de clase derivada de la función Eat (), I.mi., la función Eat () de la clase de perros. Del mismo modo, cuando adjuntamos el objeto de clase de vaca, podemos invocar la versión de clase derivada de la función EAT (), I.mi., la función Eat () de la clase de vaca. Puede ver claramente este comportamiento en la salida a continuación.
#incluir
usando el espacio de nombres STD;
animal de clase
público:
Virtual Void Eat ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
Class Dog: Public Animal
público:
void eat ()
cout << "Dog - eat non-veg!" << endl;
;
Vaca de clase: animal público
público:
void eat ()
cout << "Cow - eat veg!"a_ptr = new Cow ();
a_ptr-> eat ();
regresar 0;
Conclusión
En este artículo, he explicado el concepto de función virtual en C++. El C ++ admite diferentes tipos de polimorfismo: polimorfismo estático y polimorfismo dinámico. Con la ayuda de una función virtual, podemos lograr el tiempo de ejecución/polimorfismo dinámico. En este artículo, solo hemos analizado el concepto de función virtual y cómo lograr el polimorfismo de tiempo de ejecución. He explicado tres ejemplos de trabajo para explicar la función virtual.