Prediga la salida del siguiente programa C++ simple sin ninguna función virtual.
#include <iostream> using namespace std; class Base { public: void print() { cout << "Base class print function \n"; } void invoke() { cout << "Base class invoke function \n"; this -> print(); } }; class Derived: public Base { public: void print() { cout << "Derived class print function \n" ; } void invoke() { cout << "Derived class invoke function \n"; this -> print(); } }; int main() { Base *b = new Derived; b -> invoke(); return 0; }
Producción:
Base class invoke function Base class print function
Dado que no hay una función virtual , el comportamiento polimórfico en tiempo de ejecución no funciona en el código anterior. Ahora prediga la salida del siguiente programa en C++.
#include <iostream> using namespace std; class Base { public: virtual void print() { cout << "Base class print function \n"; } void invoke() { cout << "Base class invoke function \n"; this -> print(); } }; class Derived: public Base { public: void print() { cout << "Derived class print function \n" ; } void invoke() { cout << "Derived class invoke function \n"; this -> print(); // called under non - virtual function } }; int main() { Base *b = new Derived; b -> invoke(); return 0; }
Producción:
Base class invoke function Derived class print function
Entonces, el comportamiento polimórfico funciona incluso cuando se llama a una función virtual dentro de una función no virtual. El resultado se puede adivinar por el hecho de que la función a llamar se decide en tiempo de ejecución utilizando vptr y vtable .
Este artículo es una contribución de Sumit Jaiswal . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA