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继承很少见,我们建议谨慎使用这一特性,因为多数程序员不熟悉它。