protected (C++)

protected:
   [member-list]
protected base-class

备注

protected 关键字指定对 member-list 中的成员直到下一个访问说明符(public 或 private)或类定义的末尾的访问。 只能通过以下项使用声明为 protected 的类成员:

  • 最初声明这些成员的类的成员函数。

  • 最初声明这些成员的类的友元。

  • 使用公共或受保护访问(派生自最初声明这些成员的类)派生的类。

  • 也对受保护成员具有专用访问权限的以私有方式派生的直接类。

当以基类的名称开头时,protected 关键字指定基类的公共成员和保护成员是其派生类的保护成员。

保护成员不像 private 成员那样专用,private 成员仅对从中声明它们的类的成员可访问,但保护成员也不像 public 成员那样公开,public 成员在任何函数中均可访问。

也声明为 static 的保护成员对派生类的任何友元或成员函数均可访问。 也声明为 static 的保护成员对派生类中的友元或成员函数可访问,但只能通过指向派生类的指针、对派生类的引用或派生类的对象。

若要获得相关信息,请参阅控制对类成员的访问中的 friendpublicprivate 和成员访问表。

/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++ 关键字