1. 背景
Java中有四种访问控制:public、protected、default、private,它们的使用范围可以用下面一张表概括:
类内部 | 本包 | 子类 | 外部包 | |
---|---|---|---|---|
public | 是 | 是 | 是 | 是 |
protected | 是 | 是 | 是 | 否 |
default | 是 | 是 | 否 | 否 |
private | 是 | 否 | 否 | 否 |
整个结构还是比较简单的,从类内部到本包到子类到外部包权限越来越小,比较好理解也比较好记忆。但是在C++中访问控制要复杂很多,因为不仅有属性和方法的访问控制,还有继承时的派生列表访问说明符。今天我们着重了解访问控制。
2. 受保护的成员protected
在Java中我们一般默认子类可以访问父类的protected,但是C++中要更复杂些。它有三个特征:
- 受保护的成员对于类的用户来说是不可访问的;
- 受保护的成员对于派生类的成员和友元来说是可访问的;
- 派生类的成员或友元只能通过派生类对象来访问积累的受保护成员,派生类对于一个基类对象中的受保护成员没有任何访问特权。
怎么理解第三点呢?举个例子:
cl