2016-04-23 91 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

你是正確的,你不能從Mammal內訪問Animal的私有屬性。然而,如果你來自Java,這不是新的 - 它在那裏工作是一樣的。

請參閱此鏈接的例子:Do subclasses inherit private fields?

1

,你不能訪問類之外的私有變量,這裏_name是類的私有範圍變量。派生類也不能從基地訪問專用範圍項目。爲了解決這個問題,你可以聲明_name爲protected,它將訪問派生類。