在没有任何虚函数的情况下预测下面的简单C++程序的输出。
null
#include <iostream> using namespace std; class Base { public : void print() { cout << "Base class print function " ; } void invoke() { cout << "Base class invoke function " ; this -> print(); } }; class Derived: public Base { public : void print() { cout << "Derived class print function " ; } void invoke() { cout << "Derived class invoke function " ; this -> print(); } }; int main() { Base *b = new Derived; b -> invoke(); return 0; } |
输出:
Base class invoke function Base class print function
既然没有 虚函数 ,运行时多态行为在上述代码中不起作用。现在预测下面的C++程序的输出。
#include <iostream> using namespace std; class Base { public : virtual void print() { cout << "Base class print function " ; } void invoke() { cout << "Base class invoke function " ; this -> print(); } }; class Derived: public Base { public : void print() { cout << "Derived class print function " ; } void invoke() { cout << "Derived class invoke function " ; this -> print(); // called under non - virtual function } }; int main() { Base *b = new Derived; b -> invoke(); return 0; } |
输出:
Base class invoke function Derived class print function
因此,即使在非虚函数中调用虚函数,多态行为也会起作用。可以通过以下事实猜测输出:要调用的函数是在运行时使用 vptr和vtable .
本文由 苏米特·贾斯瓦尔 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END