保护(C++)
protected:
[member-list]
protected base-class
备注
protected 关键字在 成员列表 到下一个访问说明符 (公共 或 private) 或类定义的末尾指定对类成员。 作为 protected 声明类的成员可以通过以下仅使用:
最初声明这些成员类的成员函数。
最初声明这些成员类的友元。
派生的类具有公共或受保护从最初声明这些成员的类的访问。
处理也可以访问受保护成员的私有的私有派生类。
在前面基类的名称时, protected 关键字指定基类的公共成员和受保护的成员是它派生类的受保护成员。
受保护的成员不是同样私有的。 private 成员,对类的成员只能访问的声明,但是,它们不是同样公共与 公共 成员,可访问在所有功能。
同时声明的受保护成员,因为 静态 指向派生类的所有 friend 或成员函数进行访问。 未声明的受保护成员,因为 静态 为友元和成员函数只能访问在派生类通过指向的指针,对或该派生类的对象。
有关相关信息,请参见 friend、 公共、 专用和成员访问表在 对类成员的控件访问。
/clr 特定
在 CLR 类型, C++ 访问说明符关键字 (公共、 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
}