protected (C++)

protected:
   [member-list]
protected base-class

解説

protected キーワードは、次のアクセス指定子 (public または private) まで、またはクラス定義の最後まで、member-list 内のクラス メンバーへのアクセスを指定します。 protected として宣言されたクラス メンバーは、次でのみ使用することができます。

  • これらのメンバーを最初に宣言したクラスのメンバー関数。

  • これらのメンバーを最初に宣言したクラスのフレンド。

  • これらのメンバーを最初に宣言したクラスからパブリックまたはプロテクトのアクセス レベルで派生したクラス。

  • プロテクト メンバーへのプライベート アクセスもできる、プライベートとして設定した直接派生クラス。

基底クラスの名前を指定すると、protected キーワードは、基底クラスのパブリック、プロテクト メンバーが派生クラスのプロテクト メンバーであることを指定します。

プロテクト メンバーは、宣言されたクラスのメンバーだけにアクセスできる private メンバーほどプライベートではありませんが、任意の関数でアクセスできる public メンバーほどパブリックでもありません。

static として宣言されたプロテクト メンバーも、派生クラスの任意のフレンド関数またはメンバー関数にアクセスできます。 static として宣言されていないプロテクト メンバーは、その派生クラスへのポインター、参照、または派生クラスのオブジェクトを介してのみ、派生クラス内のフレンドおよびメンバー関数にアクセスできます。

関連情報については、「friend」、「public」、「private」および「クラス メンバーへのアクセスの制御」のメンバー アクセス テーブルを参照してください。

/clr 固有

CLR 型では、C++ アクセス指定子のキーワード (public、private、および protected) がアセンブリに関連する型およびメソッドの可視性に影響を与える可能性があります。 詳細については、「型およびメンバーの表示」を参照してください。

注意

/LN でコンパイルされるファイルは、この動作に影響を受けません。この場合、すべてのマネージ クラス (パブリックかプライベート) が表示されます。

使用例

// 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
}

参照

関連項目

クラス メンバーへのアクセス制御

C++ キーワード