多级继承成员访问

时间:2016-03-24 08:54:19

标签: c++ c++11 inheritance

我正在学习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',以及学习者的一般提示吗?

3 个答案:

答案 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;

小心使用私有继承。