2016-03-24 10 views
2

私はOOPを学習していますが、問題が発生したようです。
CODE:マルチレベル継承メンバアクセス

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;} 
}; 

問題:エラー: '二重線::'(プリント内で保護されています)。
「a」を印刷する方法はありますか、学習者の一般的なヒントはありますか?

+1

一般的なOOPまたはC++を習得していますか?それに基づいて私はいくつかの助言を与えることができます。 –

+0

'line :: a;'を使用して 'rectangle'クラスのスコープ内にあるか、' private'継承を全く使わない –

+2

なぜあなたは私的継承を使用していますか? – Claudio

答えて

4

C++でOOPを学ぶときは、プライベート継承を使う必要はありません。プライベートまたは保護された継承が優れた設計上の意思決定であるが、始動時のみではないケースがあります。のほとんどで

Difference between private, public, and protected inheritance

+1

なぜ矩形は線のサブクラスであるべきですか?長方形は線ではありません。それは線で構成されていますが、それは構成であり継承ではありません。 – Jens

+0

はい、本当ですが、彼はただ学習しています – Laurijssen

2

あなたはスーパークラスからメンバーにアクセスしたい場合は、公共の継承を使用する必要があります

class rectangle: public line {}; 
class parallelepiped: public rectangle {}; 

ここではプライベート、パブリックおよび保護継承の違いについてSO説明がありますその場合、私的継承を使う必要はありません。 他のクラスから継承したメソッドをユーザーに表示したくない場合は、単に継承を使用します。 When should I use C++ private inheritance?

私はあなたが近い将来にこれを必要としませんかなり確信している初心者として:

はここに非常に素晴らしい説明をご覧ください。

0

現在のクラスとフレンドクラスで使用できるプライベートメンバーは、派生クラスでは使用できません。公衆回線:専用回線クラスの長方形に変更されます:クラス矩形が

それはプリントアウトしても大丈夫です「」、。

プライベート継承を使用するように注意してください。