protected (C++)

語法

protected:
   [member-list]
protected base-class

備註

protected 關鍵字會指定 member-list 中,到下一個存取指定名稱 (publicprivate) 或類別定義結束之前的類別成員存取。 宣告為 protected 的類別成員只能用於下列各項:

  • 原本宣告這些成員之類別的成員函式。

  • 原本宣告這些成員之類別的 Friend。

  • 從原本宣告這些成員的類別中所衍生,具有 public 或 protected 存取權限的類別。

  • 直接以 private 方式衍生的類別,這些類別也具有對 protected 成員的 private 存取權限。

加在基底類別的名稱前面時,protected 關鍵字會將基底類別的 public 和 protected 成員指定為其衍生類別的 protected 成員。

protected 成員不像 private 成員一樣為私用,只有其宣告所在類別中的成員才能存取,而且也不像 public 成員一樣為公用,可在所有函式中存取。

同時宣告為 static 的 protected 成員可供衍生類別的任何 friend 或成員函式存取。 未宣告為 static 的 protected 成員,只能透過衍生類別的指標、參考或物件供 friend 和成員函式在衍生類別中存取。

如需相關資訊,請參閱 friendpublicprivate控制對類別成員的存取中的成員存取表。

/clr 專屬資訊

在 CLR 類型中,C++ 存取指定名稱關鍵字 (publicprivateprotected) 可能會影響類型和方法在組件方面的可視性。 如需詳細資訊,請參閱成員存取控制

注意

/LN 編譯的檔案不受此行為影響。 在這種情況下,所有 Managed 類別 (public 或 private) 都會是可見。

/clr 專屬資訊結束

範例

// 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 the derived class
}

另請參閱

控制對類別成員的存取
關鍵字