protected (C++)
语法
protected:
[member-list]
protected base-class
备注
protected
关键字指定对 member-list 中的类成员直到下一个访问说明符(public
或 private
)或类定义的末尾的访问。 只能通过以下项使用声明为 protected
的类成员:
最初声明这些成员的类的成员函数。
最初声明这些成员的类的友元。
使用公共或受保护访问(派生自最初声明这些成员的类)派生的类。
也对受保护成员具有专用访问权限的以私有方式派生的直接类。
当位于基类的名称之前时,protected
关键字指定基类的公共成员和受保护成员是其派生类的受保护成员。
受保护成员不像 private
成员那样是专用的(仅对从中声明它们的类的成员可访问),但受保护成员也不像 public
成员那样是公开的(在任何函数中均可访问)。
同样被声明为 static
的受保护成员对派生类的任何友元或成员函数均是可访问的。 未被声明为 static
的受保护成员对派生类中的友元或成员函数是可访问的,但只能通过指向派生类的指针、对派生类的引用或派生类的对象来访问。
若要获得相关信息,请参阅控制对类成员的访问中的 friend、public、private 和成员访问表。
/clr 专用
在 CLR 类型中,C++ 访问说明符关键字(public
、private
和 protected
)可能影响与程序集相关的类型和方法的可见性。 有关详细信息,请参阅成员访问控制。
注意
使用 /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
}
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈