我正在学习OOP,似乎我遇到了问题 代码:
class line {
protected:
double a;
public:
line() {a = 1;}
line(double var1) {a = var1;}
};
class rectangle: private line {
protected:
double b;
public:
double area() {return a * b;}
rectangle():line() {b = 1;}
rectangle(double var1):line(var1) {b = var1;}
rectangle(double var1, double var2):line(var1) {b = var2;}
};
class parallelepiped: private rectangle{
private:
double c;
public:
double volume() {return area() * c;}
void print() { cout << "Parallelepiped rectangle information:" << endl;
cout << "a = " << a << ", b = " << b << ", c = " << c << endl;
cout << "Volume: " << volume() << endl << endl;}
parallelepiped():rectangle() {c = 1;}
parallelepiped(double var1):rectangle(var1) {c = var1;}
parallelepiped(double var1, double var2):rectangle(var1) {c = var2;}
parallelepiped(double var1, double var2, double var3):rectangle(var1, var2) {c = var3;}
};
问题:错误:'double line :: a'受print()保护。
有什么方法可以打印出'a',以及学习者的一般提示吗?
答案 0 :(得分:4)
在C ++中学习OOP时,不需要使用私有继承。在某些情况下,私有或受保护的继承是良好的设计决策,但在刚开始时则不然。
如果要从超类访问成员
,则应使用公共继承class rectangle: public line {};
class parallelepiped: public rectangle {};
这是关于私有公共和受保护继承之间差异的SO解释:
Difference between private, public, and protected inheritance
答案 1 :(得分:2)
在大多数情况下,不需要使用私有继承。 当您想要向用户隐藏从其他类继承的某些方法时,您只想使用私有继承。
请在此处找到一个非常好的解释: When should I use C++ private inheritance?
作为初学者,我很确定你不会在不久的将来需要它。
答案 2 :(得分:0)
在当前类和朋友类中可用的私有成员在派生的calss中不可用。
当类矩形:专线更改为类矩形:公共线时,可以打印出&#39; a&#39;
小心使用私有继承。