C++/繼承
外观
< C++
三种inheritance relationship(继承关系):
- public inheritance(公开继承)视为一个 is-a 关系。是接口继承(父类的接口,在子类中也是公开的。在任何父类可以使用的地方,都可以替换为子类)。例如Student公开派生自Person,Student的对象可见可操作Person类的公开的或保护的数据成员与方法成员。
- private inheritance(私有继承)意味着 is-implemented-in-terms-of(是根据……实现的)。私有继承纯粹是一种实现技术。是实现继承。私有的基类全部是派生类的实现细节因此对外不可见。私有继承在软件设计期间没有任何意义,只在软件实现期才有考虑的可能。只要能就用 composition(复合),只有在绝对必要的时候才用私有继承。这包括将要成为 derived class(派生类)的类需要访问基类的 protected parts(保护构件),或者希望重定义一个或多个基类的虚函数。另一种情况是基类没有数据,这可以节约存储空间(empty base optimization,EBO,空基优化)。
- 不能将一个 derived class object(派生类对象)转型为一个 base class object(基类对象)
- 从一个 private base class(私有基类)继承的 protected(保护)的或 public(公有)的members(成员)会成为 derived class(派生类)的 private members(私有成员)。
- protected inheritance(保护继承):极少用到。
被继承的成员的可见性
[编辑]下表[1]
基类可见性 | 派生类可见性 | ||
---|---|---|---|
Public派生 | Private派生 | Protected派生 | |
|
|
|
|
- ↑ Balagurusamy, E. Object Oriented Programming With C++. Tata McGrawhill. 2010: 213. ISBN 978-0-07-066907-9.