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

为何C++中派生类对象无法调用被重载的基类方法?

为什么派生类调用无参func()会报错?

这是C++的**名称隐藏(Name Hiding)**机制导致的:

  • 当派生类中定义了与基类同名的成员函数时,不管两者的参数列表是否不同,基类的同名函数都会被派生类的函数隐藏。
  • 在你的代码里,基类base有一个无参的func(),而派生类derived定义了带int参数的func(int x),此时基类的无参func()就被派生类的版本隐藏了。

当你执行derived d1; d1.func();时,编译器只会在派生类derived的作用域中查找func(),找不到无参的版本,因此抛出no matching function for call to 'derived::func()'的错误。

如果想要调用基类的无参func(),需要显式指定基类作用域:

d1.base::func();

内容的提问来源于stack exchange,提问作者Satish Kumar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:35:19