C++ 基类中的f(int)是否继承到具有f(double)的派生类D中?
可能重复:C++ 基类中的f(int)是否继承到具有f(double)的派生类D中?,c++,C++,可能重复: 基类中的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(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';
}
B类{
公众:
intf(inti){cout这是函数隐藏的经典例子
C++中的重载解析在类中不起作用,派生类中的函数<强>隐藏< /强>基类中具有相同名称的所有函数。编译器只为派生类对象中的派生类中查看函数。
通过使用派生类中的使用声明,可以取消隐藏派生类的所有基类函数。
加上
using B::f;
在派生类中,将使派生类对象能够访问基类中名为f()
的所有函数,就像它们是派生类中的重载函数一样
这应该是一本很好的读物:
我认为如果给派生类一个与基类中存在的函数同名的函数,派生类的“函数”将隐藏基类的函数。如果您只是想重载,请使用using
关键字
class B {
public:
int f(int i) { cout << "f(int): "; return i+1; }
// ...
};
class D : public B {
public:
using B::f; //brings in all of B's "f" functions
//making them equals of D's "f" functions.
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';
}
B类{
公众:
int f(int i){cout什么是“不工作”?你看到了什么,你希望看到什么?它两次都在调用f(double)。所以我认为f(int)不是继承的。但为什么它不是继承的呢?还有常见问题解答: