protected (C++)protected (C++)


protected base-class


保護キーワードをクラス メンバーへのアクセスを指定します、メンバー リストまで、次のアクセス指定子 (パブリックまたはプライベート) またはクラス定義の末尾。The protected keyword specifies access to class members in the member-list up to the next access specifier (public or private) or the end of the class definition. として宣言されたクラス メンバー保護次でのみ使用できます。Class members declared as protected can be used only by the following:

  • これらのメンバーを最初に宣言したクラスのメンバー関数。Member functions of the class that originally declared these members.

  • これらのメンバーを最初に宣言したクラスのフレンド。Friends of the class that originally declared these members.

  • これらのメンバーを最初に宣言したクラスからパブリックまたはプロテクトのアクセス レベルで派生したクラス。Classes derived with public or protected access from the class that originally declared these members.

  • プロテクト メンバーへのプライベート アクセスもできる、プライベートとして設定した直接派生クラス。Direct privately derived classes that also have private access to protected members.

基底クラスの名前、保護キーワードは、基底クラスのパブリックおよびプロテクト メンバーがその派生クラスのプロテクト メンバーを指定します。When preceding the name of a base class, the protected keyword specifies that the public and protected members of the base class are protected members of its derived classes.

プロテクト メンバーがほどプライベートでないプライベート宣言されているが、としては、パブリックでないクラスのメンバーにのみアクセスできるメンバーパブリックでアクセスできるメンバー任意の関数。Protected members are not as private as private members, which are accessible only to members of the class in which they are declared, but they are not as public as public members, which are accessible in any function.

プロテクト メンバーとしても宣言されている静的は派生クラスのフレンドまたはメンバー関数にアクセスできます。Protected members that are also declared as static are accessible to any friend or member function of a derived class. プロテクト メンバーとして宣言されていない静的フレンドおよびメンバー関数へのポインター、参照、または派生クラスのオブジェクトからのみ派生クラス内からアクセスできます。Protected members that are not declared as static are accessible to friends and member functions in a derived class only through a pointer to, reference to, or object of the derived class.

関連情報については、次を参照してくださいフレンドパブリックプライベート、とでメンバー アクセス テーブルクラス メンバーへのアクセスの制御.For related information, see friend, public, private, and the member-access table in Controlling Access to Class Members.

/clr 固有/clr Specific

CLR 型では、C++ アクセス指定子のキーワード (パブリックプライベート、および保護) 型およびアセンブリに関連メソッドの可視性に影響を与えることができます。In CLR types, the C++ access specifier keywords (public, private, and protected) can affect the visibility of types and methods with regard to assemblies. 詳細については、次を参照してください。メンバー アクセス コントロールします。For more information, see Member Access Control.


ファイルがコンパイルされた/LNこの動作の影響は受けません。Files compiled with /LN are not affected by this behavior. この場合、すべてのマネージド クラス (パブリックかプライベート) が表示されます。In this case, all managed classes (either public or private) will be visible.

END /clr 固有END /clr Specific


// keyword_protected.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class X {
   void setProtMemb( int i ) { m_protMemb = i; }
   void Display() { cout << m_protMemb << endl; }
   int  m_protMemb;
   void Protfunc() { cout << "\nAccess allowed\n"; }
} x;

class Y : public X {
   void useProtfunc() { Protfunc(); }
} y;

int main() {
   // x.m_protMemb;         error, m_protMemb is protected
   x.setProtMemb( 0 );   // OK, uses public access function
   y.setProtMemb( 5 );   // OK, uses public access function
   // x.Protfunc();         error, Protfunc() is protected
   y.useProtfunc();      // OK, uses public access function
                        // in derived class

関連項目See also

クラス メンバーへのアクセス制御Controlling Access to Class Members