基类的访问说明符
基类的成员可访问在派生类中的两个因素控件;这些因素控制对继承成员的访问该派生类中:
该派生类是否声明基类使用 类头的公共 访问说明符 (类) 在 定义类类型的语法部分介绍。
哪些到该成员的访问是在基类。
下表显示了这些因素之间的交互以及如何确定的基类成员访问。
在基类成员访问
private |
protected |
Public |
---|---|---|
始终不可访问无论派生访问 |
私有在派生类,如果使用私有派生 |
私有在派生类,如果使用私有派生 |
|
保护在派生类,如果您使用受保护的派生 |
保护在派生类,如果您使用受保护的派生 |
|
保护在派生类,如果使用公共派生 |
在派生类中公共的,如果使用公共派生 |
下面的示例阐释了这一点:
// access_specifiers_for_base_classes.cpp
class BaseClass
{
public:
int PublicFunc(); // Declare a public member.
protected:
int ProtectedFunc(); // Declare a protected member.
private:
int PrivateFunc(); // Declare a private member.
};
// Declare two classes derived from BaseClass.
class DerivedClass1 : public BaseClass
{
};
class DerivedClass2 : private BaseClass
{
};
int main()
{
}
在 DerivedClass1,成员函数 PublicFunc 是公共成员,并 ProtectedFunc 是受保护的成员,因为 BaseClass 是公共基类。 PrivateFunc 是私有的。 BaseClass,因此,它是不可访问的。任何派生类。
在 DerivedClass2,,因为 BaseClass 是私有基类,函数 PublicFunc 和 ProtectedFunc 被视为私有成员。 同样, PrivateFunc 是私有的。 BaseClass,因此,它是不可访问的。任何派生类。
可以声明一个派生类,而无需一个基类的访问说明符。 在这种情况下,因此,如果派生类声明使用 类 关键字,派生被视为私有。 ,如果派生类声明使用 struct 关键字,派生被视为公共的。 例如,下列代码:
class Derived : Base
...
等效于:
class Derived : private Base
...
同样,下面的代码:
struct Derived : Base
...
等效于:
struct Derived : public Base
...
请注意作为访问私有声明的成员函数或无法由派生类访问用于基类, friend 的声明,除非这些函数或类声明。
联合 类型不能具有基类。
备注
当指定私有基类,显式使用 private 该派生类的关键字,因此时可行用户了解成员访问。