2014-10-07 53 views
-1

考慮下面的代碼:爲什麼只要訪問受保護,對象就無法訪問?

class A { 
public: 
    int y; 
    A(){ 
    int x = 10; 
    cout << x << endl; 
    } 
} a; 

不存在任何問題。聲明的對象a可以訪問。 但是,用下面的代碼:

class A { 
public: 
    int y; 
protected: 
    A(){ 
    int x = 10; 
    cout << x << endl; 
    } 
} a; 

創建對象a是不可能的,該代碼將無法編譯。有人可以向我解釋爲什麼儘管受保護的訪問修飾符無法訪問它?我錯過了什麼?謝謝。

+2

「對象在類中」 - 不,它不在類中,它位於類外部的命名空間中,因此無法訪問受保護的構造函數。 – 2014-10-07 00:31:46

回答

0

受保護的訪問說明符限制對同一類的成員函數或派生類的成員函數的訪問。換句話說,受保護的訪問說明符允許派生類直接訪問基類的成員,而不會將這些成員暴露給公衆。受保護的繼承類似於私有繼承。但是,派生類派生的類仍然可以直接訪問公共和受保護的成員。公衆(班級以外的)不會。