You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:05:17