多级继承成员访问

xTh*_*Ec0 3 c++ inheritance c++11

我正在学习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;}
};
Run Code Online (Sandbox Code Playgroud)

问题:错误:'double line::a' 在 print() 中受到保护。
有什么方法可以打印出“a”,以及对学习者的一般提示吗?

Ser*_*sen 5

在 C++ 中学习 OOP 时,您不需要使用私有继承。在某些情况下,私有或受保护的继承是很好的设计决策,但在刚开始时却并非如此。

如果你想访问超类的成员,你应该使用公共继承

class rectangle: public line {};
class parallelepiped: public rectangle {};
Run Code Online (Sandbox Code Playgroud)

这是关于私有公共继承和受保护继承之间差异的解释:

私有继承、公共继承和受保护继承之间的区别