条款39:明智的使用private继承
2015-10-18 16:59
225 查看
首先看一下private继承的法则:
class之间的继承关系如果是private的话,那么编译器不会将一个derived对象自动当作为一个base class对象。
从base class继承而来的所有方法以及属性,在derived class都会变成是private的。
private继承的底层含义实际上是;implemented in terms of,通过private继承的主要目的是使得derived class使用base 已经做好的某些东西,但是外部仍然是无法岁base class的部分进行访问的。(实现继承,省略接口部分)
虽然说private继承以及组合都可以实现implemented in terms of的关系,但能使用组合还是应该尽量使用组合。
小结:
当面对 不存在is-a关系的两个class的时候,其中一个需要访问另一个的protected成员,或者需要重新定义其一或者多个virtual函数的时候,private才有可能成为适合的选择。
在考虑完public 组合继承的方式之后,才应该考虑private继承
与符合不同的是,private继承可以造成empty base的最优化,这对于某些希望减小对象尺寸的库作者来说还是很有用的(例如stl就是这样。)
class之间的继承关系如果是private的话,那么编译器不会将一个derived对象自动当作为一个base class对象。
从base class继承而来的所有方法以及属性,在derived class都会变成是private的。
private继承的底层含义实际上是;implemented in terms of,通过private继承的主要目的是使得derived class使用base 已经做好的某些东西,但是外部仍然是无法岁base class的部分进行访问的。(实现继承,省略接口部分)
虽然说private继承以及组合都可以实现implemented in terms of的关系,但能使用组合还是应该尽量使用组合。
小结:
当面对 不存在is-a关系的两个class的时候,其中一个需要访问另一个的protected成员,或者需要重新定义其一或者多个virtual函数的时候,private才有可能成为适合的选择。
在考虑完public 组合继承的方式之后,才应该考虑private继承
与符合不同的是,private继承可以造成empty base的最优化,这对于某些希望减小对象尺寸的库作者来说还是很有用的(例如stl就是这样。)
相关文章推荐
- lintcode 容易题:Single Number 落单的数
- cadence设置丝印字体大小
- win10小娜只会搜索网页(痕迹/历史清理相关)
- RHadoop 例子WordCount测试
- [POJ 3660]Cow Contest[DFS]
- Understanding the Default DNS Application Directory Partitions in Active Directory
- 1769493476
- Libevent分析
- 条款37:绝不重新定义继承而来的 缺省参数值
- Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)
- 掌握的技能
- 软件工程师技术之路开始
- Jquery iframe获取父窗口中的元素
- memcached远程 telnet 无法连接,解决方案
- 条款36:绝对不要重新定义,继承而来的non-virtual函数
- BZOJ1037 生日聚会
- 剑指offer第二十一题【栈的压入、弹出序列】c++实现
- CSS一些小总结——个人向
- <LeetCode><Easy> 111 Minimum Depth of Binary Tree
- Memcached 服务器端命令