En este artículo, discutiremos el comportamiento de la función virtual en la clase derivada y la clase derivada de la clase base abstracta en C++ .
Considere el siguiente programa:
C++
// C++ program to illustrate the concept // of Virtual Function #include <bits/stdc++.h> using namespace std; // Base Class class Base { public: // Virtual Function virtual void print() { cout << "Inside Base" << endl; } }; // Derived Class class Derived : public Base { }; // Driver Code int main() { // Object of the derived class Base* b2 = new Derived(); // Function Call to Base Class b2->print(); return 0; }
Inside Base
Explicación: cuando un puntero de la clase base se declara apuntando a un objeto de la clase derivada , solo declare la función como virtual en la base cuando sea necesario anularla en la clase derivada. Si la función se declara como virtual en la clase base, no se recomienda anularla en la clase derivada, aún llamará a la función virtual y la ejecutará.
La palabra clave virtual solo funciona cuando se busca polimorfismo en tiempo de ejecución y se anula la función de la clase base en la clase derivada. Si se usa una palabra clave virtual y no se recomienda anular esa función en la clase derivada, entonces la palabra clave virtual no sirve. Esta propiedad no es válida para la clase Abstract Base porque tampoco hay un cuerpo de función en la clase Base. A continuación se muestra el programa para ilustrar lo mismo:
Programa 1:
C++
// C++ program to illustrate the concept // of virtual function #include <bits/stdc++.h> using namespace std; // Base Class class Base { public: // Virtual Function virtual void print() = 0; }; // Derived Class class Derived : public Base { // Overriding of virtual function void print() { cout << "Inside Derived" << endl; } }; // Driver Code int main() { // Object of the derived class Base* b2 = new Derived(); // Function Call to Base Class b2->print(); return 0; }
Inside Derived
Programa 2:
C++
// C++ program to illustrate the concept // of virtual function #include <bits/stdc++.h> using namespace std; // Base Class class Base { public: // Virtual Function virtual void print() = 0; }; // Derived Class class Derived : public Base { }; // Driver Code int main() { // Object of the derived class Base* b2 = new Derived(); // Function Call to Base Class b2->print(); return 0; }
Producción:
Explicación: si se comparan los dos programas anteriores, cuando la función se anula de la clase abstracta, entonces la palabra clave virtual funciona de la forma en que se pretendía que funcionara. Pero en el programa anterior, la función no se anuló dentro de la Clase base, y tampoco se definió la función en la Clase base, lo que resultó en el Error de compilación .
Publicación traducida automáticamente
Artículo escrito por mechanizer y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA