【发布时间】:2016-03-24 08:54:19
【问题描述】:
我正在学习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',以及给学习者的一般提示吗?
【问题讨论】:
-
你在学习普通的 OOP 还是 C++?基于此,我可以提供一些建议。
-
using line::a;在类rectangle的范围内,或者根本不使用private继承 -
为什么要使用私有继承?
-
除了其他 cmets,您可能还想阅读stackoverflow.com/questions/860339/…
-
您误解了私有继承的工作原理:阅读此stackoverflow.com/a/1372858/2214693
标签: c++ c++11 inheritance