C++开发中级


984 浏览 5 years, 11 months

6.7 非public继承

版权声明: 转载请注明出处 http://www.codingsoho.com/

非public继承

在前面的示例中,总是用public关键字列出基类。您可能疑惑父类是否可以是private或者protected。实际上可以这样做,尽管二者并不像public那样普遍。

将子类与父类的关系声明为protected意味着在子类中,父类所有的public, protected方法以及数据成员都成为protected的。与此类似,指定private访问意味着父类所有的public. protected. private方法以及数据成员在子类中都成为private的。

使用这种方法统一降低父类的访问级别有许多原因,但是多数原因都是因为层次结构的设计缺陷。有些程序员滥用这一语言特性,经常与多重继承一起实现类的“组件”。他们不是让Airplane类包含引擎数据成员以及机身数据成员,而是将Airplane类作为protected引擎以及protected机身。

使用这种方法,对于客户代码来说Airplane看上去并不像引擎或者机身(因为一切都是protected的),但在内部可以使用引擎以及机身的功能。

非public继承很少见,我们建议谨慎使用这一特性,因为多数程序员不熟悉它。