在C++中非虚函数内部调用虚函数时会发生什么

在没有任何虚函数的情况下预测下面的简单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
喜欢就支持一下吧
点赞15 分享