派生类调用使用非继承成员的继承函数
Derived class calls an inherited function that uses non-inherited members
我有一个基类,它有两个私有变量,还有一个用于打印它们的公共方法。通过从中继承,我得到了一个使用未继承到派生类的变量的方法。然而,它可以使用基类构造函数给定的值来工作和调用该方法。
甚至通过添加派生到自己的默认构造函数,以及相同的int x,y;变量,具有不同的默认值,该方法打印基类的默认值。为什么会发生这种情况,我该如何避免?我知道有受保护的成员,但这里发生了什么?我第一次尝试使用空派生类(没有构造函数和变量(,结果是一样的。它如何使用非继承的变量?
class base {
private:
int x, y;
public:
base(int px=1, int py=2)
:x(px), y(py)
{}
inline void print() const {
cout << x << ", " << y << 'n';
}
};
class derived : public base {
private:
int x, y;
public:
derived(int px = 3, int py = 3)
:x(px), y(py)
{}
};
int main{
derived e;
e.print(); // prints 1, 2
}
base::print
在derived
中看不到成员变量。你有几个选择:
- 如果确实希望
base::x
和derived::x
不同,请使用protected
- 将
px
和py
传递给base
的构造函数:derived(int px = 3, int py = 3) : base(px, py) { }
- 将
base::print
设为virtual
成员函数,并在derived
中覆盖它
哪个选项最好取决于您的要求。
相关文章:
- 为什么我可以通过SubBase类的公共继承方法打印出基类的私人继承成员
- 派生类调用使用非继承成员的继承函数
- 如果存在具有不同参数的继承成员,为什么对 C++ 结构函数的调用不明确?
- C :原始成员与继承成员的优先级
- 更改继承成员的地址
- C 是否可以不继承成员
- 使用模板的继承阴影继承成员
- 继承成员功能的模板专业化
- 不允许继承成员,为什么
- 派生模板类和继承成员变量的语法谜题
- 继承成员地址的C++标准
- 多级继承成员访问
- 访问专用模板的私有/继承成员变量
- 基模板继承成员,减少所需的类型
- 继承成员函数指针
- 模板专用化类不继承成员
- C++14正在初始化类构造函数初始化列表中的继承成员
- 具有专门初始化的继承成员变量
- 模板继承成员字段
- 访问数据成员的继承成员函数