構文
protected:
[member-list]
protected base-class
解説
protected キーワードは、次のアクセス指定子 ( または public) まで、またはクラス定義の最後まで、private 内のクラス メンバーへのアクセスを指定します。
protected として宣言されたクラス メンバーは、次でのみ使用することができます。
これらのメンバーを最初に宣言したクラスのメンバー関数。
これらのメンバーを最初に宣言したクラスのフレンド。
これらのメンバーを最初に宣言したクラスからパブリックまたはプロテクトのアクセス レベルで派生したクラス。
プロテクト メンバーへのプライベート アクセスもできる、プライベートとして設定した直接派生クラス。
基底クラスの名前の前にある protected キーワードは、基底クラスのパブリック メンバーとプロテクト メンバーがその派生クラスのプロテクト メンバーであることを指定します。
protected メンバーは、宣言されたクラスのメンバーのみがアクセスできる private メンバーほどプライベートではありませんが、どの関数でもアクセスできる public メンバーほどパブリックでもありません。
static としても宣言されたプロテクト メンバーは、派生クラスの任意のフレンド関数またはメンバー関数にアクセスできます。
static として宣言されていないプロテクト メンバーは、派生クラスへのポインター、参照、または派生クラスのオブジェクトを介してのみ、派生クラス内のフレンドおよびメンバー関数にアクセスできます。
関連情報については、「friend」、「public」、「private」、および「クラス メンバーへのアクセスの制御」のメンバー アクセス テーブルを参照してください。
/clr 固有
CLR 型では、C++ アクセス指定子のキーワード (public、private、および protected) が、アセンブリに関連する型およびメソッドの可視性に影響を与える可能性があります。 詳細については、「メンバー アクセス コントロール」を参照してください。
Note
/LN でコンパイルされるファイルは、この動作に影響を受けません。 この場合、すべてのマネージド クラス (パブリックかプライベート) が表示されます。
END /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
}