C++继承中虚函数调用疑问:Threading为何调用子类fun?
问题解答
先看你的代码实现:
#include<iostream> using namespace std; class FR { public : virtual int fun() { cout<<"In FR Class "<<endl; } int Threading() { fun(); } }; class FD : public FR { public : int fun() { cout<<" In FD class "<<endl; } }; int main() { FD obj ; obj.Threading(); }
你遇到的核心问题是C++虚函数的动态绑定机制:
- 虚函数的调用逻辑是根据对象的实际类型来匹配实现,而不是看调用它的成员函数属于哪个类。
- 虽然
Threading()是基类FR的成员函数,但执行fun();时,程序会识别到当前对象的实际类型是FD(你创建的是FD实例),所以会调用子类FD中重写的fun()版本。
如果要在Threading()里强制调用基类FR的fun(),可以显式指定类作用域,修改基类的Threading()函数:
int Threading() { FR::fun(); // 直接指定调用基类的fun()实现 }
这样无论调用Threading()的对象是FR还是FD实例,都会执行基类的fun()。
内容的提问来源于stack exchange,提问作者Jigar Patel
相关产品推荐
相关产品推荐

