2011-03-14 79 views
0
class Base{ 
public: 
    void setX(int a) {x=a;} 
private: 
    int x; 
}; 

class D1: protected Base{};? 
class D2: public D1{}; 

什麼是類D2中的成員函數setX()的訪問級別? 是否受到保護?私人? 任何一種人都可以解釋這一點,我的意思是如何判斷訪問級別的相關性......這樣的事情。謝謝!C++訪問級別

編輯:添加更多的問題

但爲什麼我不能叫:d2.setX()? d2是D2的一個實例。原來編譯器錯誤 - user658213 0秒前編輯

+0

什麼是成員函數'X()'?爲什麼'D2'自己公開繼承?你想做什麼 ? – Mahesh 2011-03-14 04:29:01

+0

'class D2:public D1 {}'? – 2011-03-14 04:30:03

+0

對不起,幾個tpyos – user658213 2011-03-14 04:30:57

回答

1

SetX受保護,x無法從D2訪問。你只能限制訪問,你不能擴大它。

+0

但我爲什麼不能調用:d2.setX()? d2是D2的一個實例。事實證明,編譯器錯誤 – user658213 2011-03-14 04:34:56

+0

出於同樣的原因,如果你已經在'D2'本身聲明瞭'setX',@ User,你就不能調用它。它受到保護,所以你不能從課外或其後代訪問它。 – 2011-03-14 04:40:23

+0

你可以使用'using'來「擴大」訪問。 – 2011-03-14 04:50:59

0

setX通過D1中的受保護繼承進行保護,並且通過D2中的公共繼承保持保護。因此,D2中的最終訪問級別受到保護。

您無法調用setX的原因取決於調用上下文。如果您是從基地或D1(例如D2)派生出來的班級之外打電話,那麼您將無法以相同的原因致電您,因爲您無法致電任何受保護的成員 - 它們僅供派生班級使用。