继承是实现软件重用的一种方式。

在C++中拥有另一种实现软件重用的方式-----

Composition:对象组合

用已经有的对象制造新的对象

(设计一个类的时候它的成员变量可以是另一个类的对象)

对象组合的两种方式:

(内存模型复杂度:访问对象时既可以通过对象本身访问,也可以通过指针访问)

  • Fully (全部地、充足地) inclusion
  • By reference (通过引用)inclusion

Fully:组合的对象可以是我的对象的一部分 (成员变量是对象本身)

By reference :组合的对象不是我的一部分,我只是知道它在哪儿能够去访问它(成员变量是指针)

java只能By reference

Example:

类SavingAccount里面 包含两个private对象

----属于Person类的saver 和 属于Currency类的balance

这里的成员变量是直接使用 而没有用指针

说明是运用的 Fully inclusion 方法来实现的 Composition

所以 在这个Example里 SavingAccount类的构造函数应该使用

Initializer list(初始化列表)的方法定义:

而输出就使用m_saver.ptint()即原本就含有的输出方法

嵌入式对象:

1.所有的嵌入式对象都需要初始化

  • -如果你没有提供参数 你就要使用默认初始化函数

2.构造函数可以有初始化列表

  • -任何数量的对象都要通过逗号分开
  • -是可选择的(也可以不使用初始化列表)
  • -提供了参数给子构造函数

3.语法规则

name ( args参数 )  [ ' : '  initialization list ] ' { '...' } '

公共对象VS私有对象

他们都是在制造嵌入式对象

  1. 他们是底层实现的一部分
  2. 新对象只有一部分旧对象的公共接口

可以作为公共对象嵌入如果你想要新对象能有子对象的全部的公共接口

最新文章

  1. Groupon面经:Find paths in a binary tree summing to a target value
  2. Servlet错误一览
  3. 转载.NET 4.0中的泛型的协变和逆变
  4. I - Navigation Nightmare-poj 1984
  5. Codeforces Round #366 (Div. 2) C. Thor (模拟)
  6. 轻谈 return i++
  7. [4.14校内训练赛by hzwer]
  8. openlayers4 入门开发系列之批量叠加 zip 压缩 SHP 图层篇(附源码下载)
  9. SpringBoot系列——Redis
  10. haar特征(转)
  11. L1&L2 Regularization的原理
  12. A面&B面
  13. chrome-Firefox-IE浏览器兼容总结
  14. api文档生成器apidoc的安装和使用
  15. AutoFac使用方法总结四:生命周期续
  16. Python基础-画图:matplotlib
  17. Java NIO开发需要注意的陷阱(转)
  18. JVM(二) 对象存活判断和垃圾回收算法
  19. 摄影之HDR
  20. Java反射——java.lang.Class 类简介

热门文章

  1. Hbuilderx Eslint配置
  2. InvalidClassException异常_原理和解决方案和练习_序列化集合
  3. YII事件EVENT示例
  4. 将Nginx配置成系统开机启动服务
  5. C# 虚方法、抽象方法
  6. Postman如何通过xmysql工具的Restful API 接口访问MySQL
  7. LuoguP1283 平板涂色(状压DP)
  8. Luogu5019 铺设道路 (贪心)
  9. Postman如何做接口测试,那些不得不知道的技巧
  10. n【c#】委托:delegate 学习笔记