【发布时间】:2019-10-27 19:58:54
【问题描述】:
我有一个基类,它有两个私有变量和一个打印它们的公共方法。通过从它继承,我得到了一个使用未继承到派生类的变量的方法。但是,它可以工作并使用基类构造函数给出的值调用该方法。
甚至通过添加到派生他自己的默认构造函数,和相同的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
}
【问题讨论】:
标签: c++ inheritance encapsulation