可能重复:
为什么派生类中的重写函数会隐藏基类的其他重载?
基类中的f(int)是否在派生的派生类D中继承?如果是,那么为什么超载在这里不起作用.如果没有那么为什么f(int)不被继承,因为类d是公开派生的.我很迷惑.
class B {
public:
int f(int i) { cout << "f(int): "; return i+1; }
// ...
};
class D : public B {
public:
double f(double d) { cout << "f(double): "; return d+1.3; }
// ...
};
int main()
{
D* pd = new D;
cout << pd->f(2) << '\n';
cout << pd->f(2.3) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
这是函数隐藏的经典示例.
C++中的重载决策不适用于各种类,派生类中的函数隐藏 Base类中具有相同名称的所有函数.编译器仅在派生类中查看派生类对象的函数.
您可以使用using声明取消隐藏 派生类的所有基类函数.在你的派生类中.
添加,
using B::f;
Run Code Online (Sandbox Code Playgroud)
在派生类中,将使派生类对象能够访问名为f()int Base类的所有函数,就好像它们是Derived类中的重载函数一样.
这应该是一个很好的阅读:
是什么意思,警告:Derived :: f(char)隐藏Base :: f(double)?
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |