2016-04-23 7 views
-1
#include <iostream> 
#include <string> 
using namespace std ; 
enum COLOR { Green, Blue, White, Black, Brown } ; 
class Animal { 
public : 
    Animal() : _name("unknown") { 
     cout << "constructing Animal object "<< _name << endl ; 
    } 
    Animal(string n,COLOR c) : _name(n),_color(c) { 
     cout << "constructing Animal object "<< _name << endl ; 
    } 

    ~Animal() { 
     cout << "destructing Animal object "<< _name << endl ; 
    } 
    void speak() const { 
     cout << "Animal speaks "<< endl ; 
    } 
    void move() const { } 
private : 
    string _name; 
    COLOR _color ; 
}; 
class Mammal:public Animal{ 
public: 
    Mammal(string n,COLOR c):Animal(n,c){ 
     cout << "constructing Mammal object "<< _name << endl ; 
    } 
    ~Mammal() { 
     cout << "destructing Animal object "<< _name << endl ; 
    } 
    void eat() const { 
     cout << "Mammal eat " << endl ; 
    } 
}; 

私はちょうどjavaからC++への移行を開始しました。違いを知るためにオブジェクト指向のコーディングを練習しています。はC++での継承について混乱しています

上記のコードでは、哺乳類のクラスから_nameにアクセスできません。

哺乳類のクラスはプライベート属性を継承しませんか?この場合、継承ごとにこれらの属性を再作成する必要がありますか?

+2

あなたのタイトルはあなたの身体と一致しません - あなたはC++の継承によって混乱しているのですか? –

+0

はい、編集しました –

+4

プライベートはプライベートです。派生クラスからメンバー変数を見えるようにするには、それらを '' protected'セクションに入れます。 – BitTickler

答えて

2

Animalのプライベート属性には、Mammalからアクセスできないということは間違いありません。しかし、あなたがJavaから来ているなら、これは新しいものではありません。

例えば、このリンクを参照してください:Do subclasses inherit private fields?

1

あなたはクラスの外でプライベート変数にアクセスすることはできません、ここで_nameは、クラスのプライベートスコープ変数です。派生クラスもベースからプライベートスコープアイテムにアクセスすることはできません。この問題を解決するには、_nameをprotectedとして宣言し、派生クラスにアクセスします。

関連する問題