基类中的f(int)是在具有f(double)的派生派生类D中继承的吗
Does f(int) in base class inherited in derived derived class D which have f(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';
}
这是函数隐藏的经典示例
C++中的重载解析不能跨类工作,派生类中的函数隐藏基类中所有名称相同的函数。编译器只在派生类对象的派生类中看到函数。
通过使用using Declaration,可以取消隐藏派生类的所有基类函数在派生类中。
添加,
using B::f;
在派生类中,将使派生类对象能够访问基类中名称为f()
的所有函数,就好像它们是派生类中的重载函数一样。
这应该是一个很好的阅读:
警告的含义是什么:派生::f(char(隐藏基::f(double(
我认为,如果给派生类一个与基类中存在的函数同名的函数,则派生类的"function"将隐藏基类的"functions"。如果您只是想重载,请使用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';
}
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 具有多个类、派生类的C++正向声明
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 运算符=(double)隐藏在派生类中
- 基类中的f(int)是在具有f(double)的派生派生类D中继承的吗