protected (C++)

구문

protected:
   [member-list]
protected base-class

설명

protected 키워드는 member-list의 클래스 멤버에 대한 액세스를 다음 액세스 지정자(public 또는 private) 또는 클래스 정의의 끝까지 지정합니다. protected로 선언된 클래스 멤버는 다음에만 사용할 수 있습니다.

  • 원래 이 멤버를 선언한 클래스의 멤버 함수

  • 원래 이 멤버를 선언한 클래스의 friend

  • 원래 이 멤버를 선언한 클래스에서 공용 또는 보호된 액세스로 파생된 클래스

  • 보호된 멤버에 대해 전용 액세스 권한이 있으며 전용으로 직접 파생된 클래스

기본 클래스 이름 앞에 오는 protected 키워드는 기본 클래스의 공용 및 보호된 멤버가 파생된 해당 클래스의 보호된 멤버라고 지정합니다.

보호된 멤버는 선언된 클래스의 멤버에만 액세스할 수 있는 private 멤버만큼 전용은 아니지만 어느 함수에서나 액세스할 수 있는 public 멤버만큼 공용도 아닙니다.

static으로도 선언된 보호된 멤버는 파생된 클래스의 friend나 멤버 함수에 액세스할 수 있습니다. static으로 선언되지 않은 보호된 멤버는 파생된 클래스의 포인터, 참조 또는 개체를 통해서만 파생된 클래스의 friend와 멤버 함수에 액세스할 수 있습니다.

관련 정보는 friend, public, private클래스 멤버에 대한 액세스 제어의 멤버 액세스 테이블을 참조하세요.

/clr 관련

CLR 형식에서 C++ 액세스 지정자 키워드(public, privateprotected)는 어셈블리와 관련된 형식 및 메서드의 표시 유형에 영향을 줄 수 있습니다. 자세한 내용은 멤버 액세스 제어를 참조하세요.

참고 항목

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

참고 항목

클래스 멤버에 대한 액세스 제어
키워드