受保護 (C++)
protected:
[member-list]
protected base-class
備註
protected關鍵字是表示內的類別成員存取權成員清單進位到下一步的存取規範 (公用或private) 或類別定義結尾。 類別成員宣告為protected可僅由下列:
原本宣告這些成員的類別成員函式。
原本宣告這些成員之類別的朋友。
原本宣告這些成員之類別的衍生類別具有公用或保護的存取權。
直接公開衍生的類別也具有私用存取受保護的成員。
當之前的基底類別中,名稱protected關鍵字指定的基底類別的公用和受保護成員是其衍生類別的受保護的成員。
受保護的成員並不是做為私人private成員,只有在其中宣告它們,但是並不會做為公用類別的成員才能存取公用會在任何函式中存取的成員。
受保護的成員,也宣告為靜態存取衍生任何的類別朋友或成員函式。 受保護的成員,並未宣告成靜態存取給朋友及只能透過指標來參考或在衍生類別的物件在衍生類別中的成員函式。
如需相關資訊,請參閱朋友, 公用, 私用,和成員存取資料表,在 控制存取類別成員。
在 /clr 特定
在 CLR 型別 C++ 會存取規範關鍵字 (公用, private,以及protected) 可能會影響到型別和組件與相關方法的可視性。 如需詳細資訊,請參閱 型別和成員的可視性。
注意事項 |
---|
使用編譯的檔案用不會受到這個問題。在此情況下,會顯示所有的 managed 的類別 (公用或私用)。 |
範例
// keyword_protected.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class X {
public:
void setProtMemb( int i ) { m_protMemb = i; }
void Display() { cout << m_protMemb << endl; }
protected:
int m_protMemb;
void Protfunc() { cout << "\nAccess allowed\n"; }
} x;
class Y : public X {
public:
void useProtfunc() { Protfunc(); }
} y;
int main() {
// x.m_protMemb; error, m_protMemb is protected
x.setProtMemb( 0 ); // OK, uses public access function
x.Display();
y.setProtMemb( 5 ); // OK, uses public access function
y.Display();
// x.Protfunc(); error, Protfunc() is protected
y.useProtfunc(); // OK, uses public access function
// in derived class
}