c++中public、protected与private关键字

不用说,这三个关键字大家都很熟悉,今天我主要是重新温习一遍,理清一遍。 # 访问权限关键字(无继承关系时) - public: 这个关键字代表对外界开放,用户可以通过一个对象直接进行其public成员的访问操作;

  • protected: 这个关键字代表只对自己的派生类开放,对与普通用户不开放;

  • private: 这个关键字代表只对自己内部的成员(或友元)开放,对其他任何外在用户(包括派生类对象)都不开放。

派生类继承来的基类部分的成员的访问权限说明

派生类继承来的基类部分的成员的访问权限受到两个因素影响: 1. 在基类中该成员的访问说明符; 2. 在派生类的派生列表中的访问说明符(也叫做继承方式)。

然后关于派生类继承来的成员的权限可以分为以下两方面来讨论。

最后会对继承方式进行总结

派生类对自己继承的基类部分的成员的访问权限解析

派生类对其继承而来的基类部分的成员的访问权限只受到1个因素影响:在基类中该成员的访问说明符

1
2
3
4
5
6
7
8
9
10
//下列两个关键字,第一个代表基类中成员的访问说明符;第二个代表派生类派生列表中的访问说明符
public + public: 可以访问
public + protected: 可以访问
public + private: 可以访问
protected + public: 可以访问
protected + protected: 可以访问
protected + private: 可以访问
private + public: 不可访问
private + protected: 不可访问
private + private: 不可访问

由上,只有基类中成员的访问说明符起作用了,派生访问说明符并没有起作用。

派生访问说明符的作用

派生访问说明符的作用是控制派生类对象(包括派生类的派生类在内)对于这部分基类成员的访问权限。

所以对于一个派生类的对象(包括派生类的派生类在内),其对于此派生类中的基类部分的成员的访问权限就是由两个因素决定的了。如下:

1
2
3
4
5
6
7
8
9
10
//下列两个关键字,第一个代表基类中成员的访问说明符;第二个代表派生类派生列表中的访问说明符
public + public: 可以访问
public + protected: 派生类的派生类可以访问,派生类的其他对象不可访问
public + private: 不可访问
protected + public: 派生类的派生类可以访问,派生类的其他对象不可访问
protected + protected: 派生类的派生类可以访问,派生类的其他对象不可访问
protected + private: 不可访问
private + public: 不可访问
private + protected: 不可访问
private + private: 不可访问

同样,还有一点,我们会看到有将派生类向基类类型转换的代码,这个也是有条件的。条件就是,如果对当前代码基类部分的公有成员是可访问的,则派生类向基类的类型转换也是可访问的。

继承方式限定了基类成员在派生类中的访问权限

1
2
3
4
5
6
7
8
9
10
11
12
1. public继承方式
基类中所有public成员在派生类中为public属性
基类中所有protected成员在派生类中为protected属性
基类中所有private成员在派生类中不能使用
2. protected继承方式
基类中所有public成员在派生类中为protected属性
基类中所有protected成员在派生类中为protected属性
基类中所有private成员在派生类中不能使用
3. private继承方式
基类中所有public成员在派生类中为private属性
基类中所有protected成员在派生类中为private属性
基类中所有private成员在派生类中不能使用

不论继承方式如何,基类中的private成员在派生类中始终不能使用(不能在派生类的成员函数中访问或调用)

参考资料

  • [1] C++ Primer(第5版)

c++中public、protected与private关键字
http://line.com/2018/10/25/2018-10-25-cpp-public-protected-private/
作者
Line
发布于
2018年10月25日
许可协议