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派生
  • Private →
  • Protected →
  • Public →
  • 不能继承
  • Protected
  • Public
  • 不能继承
  • Private
  • Private
  • 不能继承
  • Protected
  • Protected
  1. Balagurusamy, E. Object Oriented Programming With C++. Tata McGrawhill. 2010: 213. ISBN 978-0-07-066907-9.