我相信这里已经给出了最好的答案:为什么派生类中的重写函数会隐藏基类的其他重载?
但我有点困惑,特别是声明:
为了覆盖此行为,需要用户进行显式操作:最初是重新声明继承的方法(当前已弃用),现在显式使用 using-declaration。
假设我有以下程序:
#include <iostream>
using namespace std;
class Base
{
public:
int f(int i)
{
cout << "f(int): ";
return i+3;
}
};
class Derived : public Base
{
public:
double f(double d)
{
cout << "f(double): ";
return d+3.3;
}
};
int main()
{
Derived* dp = new Derived;
cout << dp->f(3) << '\n';
cout << dp->f(3.3) << '\n';
delete dp;
return 0;
}
我有两个问题:
我可以假设,wrt 派生类对象,该
int f(int i)
函数根本不存在。由于名称隐藏,这不是继承的。如果我必须在派生类中使用这个函数,我必须在派生类中重新定义它吗?