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

在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. 新对象只有一部分旧对象的公共接口

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

C++自学笔记 Composition:对象组合的更多相关文章

  1. jQuery:自学笔记(4)——事件与事件对象

    jQuery:自学笔记(4)——事件与事件对象 jQuery中的事件 什么是事件 所谓事件,就是被对象识别的操作,即操作对象队环境变化的感知和反应,例如单击按钮或者敲击键盘上的按键. 所谓事件流,是指 ...

  2. 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...

  3. python自学笔记

    python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...

  4. JAVA自学笔记10

    JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...

  5. JAVA自学笔记26

    JAVA自学笔记26 1.网络编程 1)用来实现网络互联的不同计算机上运行的程序可以进行数据交换 2)网络模型一般泛指 OSI:(Open System Interconnection)开放系统互联参 ...

  6. JAVA自学笔记27

    JAVA自学笔记27 1.类的加载 1)当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. ①加载:就是指将class文件读入内存,并为之创 ...

  7. TS 自学笔记(二)装饰器

    TS 自学笔记(二)装饰器 本文写于 2020 年 9 月 15 日 上一篇 TS 文章已经是很久之前了.这次来讲一下 TS 的装饰器. 对于前端而言,装饰器是一个陌生的概念,但是对于 Java.C# ...

  8. 《Linux内核设计与实现》课本第三章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有 ...

  9. 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...

随机推荐

  1. 水电表/燃气表/压力表/传感器/仪器仪表等,超低功耗段码LCD液晶显示驱动IC-VKL144A/B 超低工作电流,36*4COM显示,替代PCF8551/MCP144/BU9792/9B92/BL55072B等

    煤气罐的使用安全隐患较大,现在大部分城市使用管道输送燃气,燃气表的计费大都是通过远程抄表的方式,或者充值的方式,为了让用户更好地了解自家燃气表的使用情况,需要一款液晶屏来显示燃气表的状态和用气量等信息 ...

  2. uniapp调用jar

    前言 此方法为使用uniapp开发前端资源,然后继承进安卓原生项目,达到调用uniapp调用jar的效果. 基于Android Studio进行开发. 本人不懂安卓以及gradle,只是基于搜索引擎以 ...

  3. 使用uni-app 地图组件

    首先,官方文档:https://uniapp.dcloud.io/component/map.html so,easy 但是没什么用~--~,太简单了 uni-app一般内置的使用的是腾讯地图,这个组 ...

  4. 分享一些小tips

    谷歌浏览器破解 google拓展商店中hackbar地址 https://chrome.google.com/webstore/detail/djmoeoifnlhjolebkehmpaocfnipk ...

  5. 主线程和创建多线程程序的第一种方式_创建Thread类的子类

    /** * 主线程:执行主方法的线程(main) * 单线程程序:在java程序中只有一个线程 * 执行从main方法开始,从上倒下依次执行 */ public class Demo01MainThr ...

  6. 清北学堂 2020 国庆J2考前综合强化 Day2

    目录 1. 题目 T1 一 题目描述 Sol T2 二 题目描述 Sol T3 三 题目描述 Sol T4 四 题目描述 Sol 2. 算法 -- 数据结构 1. 题目 T1 一 题目描述 问题描述 ...

  7. mysql 之full join

    首先,mysql中是不支持full join的,如果要实现类似的功能可以用union all,union会剔除重复.以下是实现实例 create table if not exists t1(`id` ...

  8. mysql玩法

    如何字段名查找所在的表名 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = '字段名字' select sys ...

  9. 关于奉加微PHY62xx系列如何选型?PHY6222/PHY6212/PHY6252

    PHY6252是一款支持BLE 5.2功能的系统级芯片(SOC),集成了低功耗的高性能多模射频收发机,搭载32位高性能低功耗处理器,提供64K retention SRAM.可选512/256K Fl ...

  10. Luogu P5030 长脖子鹿放置(网络流)

    匈牙利T了,Dinic飞了... 按奇偶连 #include <cstdio> #include <iostream> #include <cstring> #in ...