为何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
相关产品推荐
相关产品推荐

