Variable virtual en C++
El polimorfismo es uno de los pilares de la Programación Orientada a Objetos en C++ que puede mostrar un determinado mensaje en más de una forma. Tenemos dos tipos de polimorfismo: tiempo de compilación y tiempo de ejecución, logrados mediante la sobrecarga de funciones y la anulación de funciones, respectivamente.
Sin embargo, la anulación de funciones implica el uso de la palabra clave virtual
en C++. Este artículo trata sobre las variables virtuales en C++.
Variable virtual en C++
El polimorfismo se puede describir como algo que tiene muchas formas. Un ejemplo del mundo real de polimorfismo puede ser una mujer que es madre, hija, hermana y nuera, al mismo tiempo.
Sin embargo, desde el punto de vista de la programación, el polimorfismo se puede lograr usando una función miembro con el mismo tipo o diferente más de una vez para diferentes propósitos.
Hay dos tipos de polimorfismo: el tiempo de compilación, también conocido como enlace temprano, se logra mediante la sobrecarga de funciones o la sobrecarga de operadores. En términos simples, es la capacidad de usar una función con el mismo nombre pero con un número o tipo de argumento diferente.
Por otro lado, el polimorfismo en tiempo de ejecución se logra mediante la anulación de funciones.
La anulación de funciones es la capacidad de usar una función con el mismo nombre, tipo y varios argumentos. Se logra usando la palabra clave virtual
en C++.
Para implementar la anulación de funciones, creamos funciones virtuales en C++; sin embargo, no existe tal concepto llamado variable virtual en C++.
Las funciones virtuales son las que permiten polimorfismo y no variables virtuales. Una función virtual es una función miembro declarada en la clase base y anulada en la clase derivada.
Cada vez que nos referimos a un objeto de clase secundaria usando un puntero de clase principal, podemos llamar a una función virtual para ese objeto y ejecutar la versión de clase secundaria (versión de clase derivada) de esa función.
En C++, las funciones virtuales permiten que dos clases de diferentes tipos sean tratadas como iguales por el código de llamada, y las diferencias en el comportamiento interno de las clases se encapsulan en las funciones virtuales. Sin embargo, en el caso de las variables virtuales, el comportamiento se encapsula accediendo a una variable.
Sin embargo, puede realizar polimorfismo simplemente usando la función virtual en C++. Veamos el código del mismo.
#include <iostream>
using namespace std;
class parent {
public:
virtual void print() { cout << "printing the parent class function\n"; }
void show() { cout << "showing the parent class function"; }
};
class child : public parent {
public:
void print() { cout << "printing the child class function\n"; }
void show() { cout << "showing the child class function\n"; }
};
int main() {
parent *p;
child c;
p = &c;
p->print();
p->show();
return 0;
}
Producción :
printing the child class function
showing the parent class function
En el ejemplo de código anterior, dado que estamos haciendo referencia a la clase secundaria utilizando el puntero de la clase principal, podemos llamar a la función virtual para ese objeto y ejecutar la versión de la función de la clase secundaria.
Por lo tanto, hemos hecho virtual la función print
de la clase padre, después de lo cual la función que se ejecuta llamando a la función print()
es la que está en la clase secundaria, mientras que la función mostrar()
, que no es virtual, aún imprime la versión principal de la función.
Conclusión
En este artículo, hemos discutido el polimorfismo, las funciones virtuales y las variables virtuales en C++. El polimorfismo se describe de muchas formas y tiene dos tipos: tiempo de ejecución y tiempo de compilación.
Sin embargo, las funciones virtuales son las que se utilizan para implementar el polimorfismo en tiempo de ejecución en C++ al hacer que una función sea virtual. Pero no hay nada llamado variables virtuales en C++ ya que no hay comportamiento para encapsular accediendo a una variable.