文章目录

  • 1 组合
    • 1.1 组合的基本概念
    • 1.2 组合的具体方式
    • 1.3 组合的具体实例
  • 2 聚合
    • 2.1 聚合的基本概念
    • 2.2 聚合的具体实例

1 组合

1.1 组合的基本概念

当两个对象之间是整体与部分的关系时,它们之间就是组合的关系。

对于如下问题:
构建一个计算机类,一台计算机,由CPU芯片,硬盘,内存等组成。CPU芯片也使用类来表示。

计算机类和CPU类就是组合关系,组合关系具有如下特点:

  • 被拥有的对象(芯片)的生命周期与其拥有者(计算机)的生命周期是一致的。

    • 计算机被创建时,芯片也随之创建。
    • 计算机被销毁时,芯片也随之销毁。
  • 拥有者需要对被拥有者负责,是一种比较强的关系,是整体与部分的关系。

1.2 组合的具体方式

具体组合方式:
1)被组合的对象直接使用成员对象。(常用)
2)使用指针表示被组合的对象,在构造函数中,创建被组合的对象;在析构函数中,释放被组合的对象。

UML中的组合表示:

注意包含者使用实心菱形(UML画图工具:starUML)。

1.3 组合的具体实例

构建一个计算机类,一台计算机,由CPU芯片,硬盘,内存等组成。CPU芯片也使用类来表示。

CPU类:

#pragma once#include <string>class CPU
{public:CPU(const char *brand = "intel", const char *version="i5");~CPU();
private:std::string brand; //品牌std::string version; //型号
};
#include "CPU.h"
#include <iostream>CPU::CPU(const char *brand, const char *version)
{this->brand = brand;this->version = version;std::cout << __FUNCTION__ << std::endl;
}CPU::~CPU()
{std::cout << __FUNCTION__ << std::endl;
}

Computer类:

#pragma once
#include "CPU.h"class Computer
{public:Computer(const char *cpuBrand, const char *cpuVersion, int hardDisk, int memory);~Computer();
private:CPU cpu;      // Computer和CPU是“组合”关系int hardDisk; //硬盘, 单位:Gint memory;   //内存, 单位:G
};
#include "Computer.h"
#include <iostream>Computer::Computer(const char *cpuBrand, const char *cpuVersion,int hardDisk, int memory):cpu(cpuBrand, cpuVersion)
{this->hardDisk = hardDisk;this->memory = memory;std::cout << __FUNCTION__ << std::endl;
}Computer::~Computer()
{std::cout << __FUNCTION__ << std::endl;
}

main.cpp:

#include <iostream>
#include <Windows.h>
#include <string>
#include <string.h>
#include "Computer.h"using namespace std;void test() {Computer a("intel", "i9", 1000, 8);
}int main(void) {test();system("pause");return 0;
}

构造与析构的顺序如下:

Cpu::Cpu
Computer::Computer
Computer::~Computer
Cpu::~Cpu

2 聚合

2.1 聚合的基本概念

聚合不是组成关系,被包含的对象,也可能被其他对象包含。
拥有者,不需要对被拥有的对象的生命周期负责。

UML中的组合表示:

2.2 聚合的具体实例

需求:给计算机配一台音响。

Computer类:

#pragma once
#include "CPU.h"class VoiceBox;class Computer
{public:Computer(const char *cpuBrand, const char *cpuVersion, int hardDisk, int memory);~Computer();void addVoiceBox(VoiceBox *box);
private:CPU cpu;  // Computer和CPU是“组合”关系int hardDisk; //硬盘, 单位:Gint memory;   //内存, 单位:GVoiceBox *box; //音箱
};
#include "Computer.h"
#include <iostream>
#include "VoiceBox.h"Computer::Computer(const char *cpuBrand, const char *cpuVersion,int hardDisk, int memory):cpu(cpuBrand, cpuVersion)
{this->hardDisk = hardDisk;this->memory = memory;std::cout << __FUNCTION__ << std::endl;
}void Computer::addVoiceBox(VoiceBox *box) {this->box = box;
}Computer::~Computer()
{std::cout << __FUNCTION__ << std::endl;
}

main.cpp:

#include <iostream>
#include <Windows.h>
#include <string>
#include <string.h>
#include "Computer.h"
#include "VoiceBox.h"using namespace std;void test(VoiceBox *box) {Computer a("intel", "i9", 1000, 8);a.addVoiceBox(box);
}int main(void) {VoiceBox box;test(&box);system("pause");return 0;
}

参考资料:

  1. C/C++从入门到精通-高级程序员之路【奇牛学院】

建模的常用手段:组合与聚合相关推荐

  1. php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理)

    php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理) 一.总结 一句话总结: 比较记忆:注意比较各种攻击的区别,比如csrf和xss,以及xss和sql,这样才能记住 1.Sql注入是什 ...

  2. java依赖_java 依赖、组合、聚合与继承

    java中类与类之间的关系 大部分的初学者只知道java中两个类之间可以是继承与被继承的关系,可是事实上,类之间的关系大体上存在五种-继承(实现).依赖.关联.聚合.组合. 接下来,简单的分析一下这些 ...

  3. 数学建模中常用的方法

    数学建模中常用的方法:类比法.二分法.差分法.变分法.图论法.层次分析法.数据拟合法.回归分析法.数学规划(线性规划,非线性规划,整数规划,动态规划,目标规划).机理分析.排队方法.对策方法.决策方法 ...

  4. 组合、聚合、继承详解

    有人学了继承,认为他是面向对象特点之一,就在所有能用到继承的地方使用继承,而不考虑究竟该不该使用,无疑,这是错误的.那么,究竟该如何使用继承呢? java中类与类之间的关系 大部分的初学者只知道jav ...

  5. 政客常用手段_我可以比政客更好地管理经济

    政客常用手段 The idea that the work of our elected representatives could be done better by a computer prog ...

  6. 资深建模师常用的几款建模软件,你了解多少?

    如何学习游戏建模?对于有兴趣且有时间的小伙伴,相信都是选择自学,也许你会在网上寻找大量的资料.教程,然后开始你的探索之旅,当然,在我看来,科班教学更加有效和更深刻的过程,在其中你收获到的相信不只是学识 ...

  7. 数学建模中matlab程序,数学建模中常用的30个MATLAB程序和函数

    <数学建模中常用的30个MATLAB程序和函数>由会员分享,可在线阅读,更多相关<数学建模中常用的30个MATLAB程序和函数(15页珍藏版)>请在人人文库网上搜索. 1.内部 ...

  8. Java中的组合、聚合和关联关系

    1.介绍 对象之间在现实生活和编程中都有关系.有时很难理解或实现这些关系. 在本教程中,我们将重点介绍 Java 的三种关系类型,这些关系有时很容易混合:组合.聚合和关联. 2.组合 组成是一种&qu ...

  9. 计算机的命令函数,数学建模的常用的命令和基本函数..doc

    数学建模的常用的命令和基本函数. 上次作业: 利用Matlab帮助系统查询特殊矩阵函数zeros,并输出2行3列.3行3列这样的矩阵. 一.Matlab6.5的常用的命令和技巧: 常用的命令 表1 M ...

最新文章

  1. typedef的作用
  2. java native方法体在哪_java中native方法的使用
  3. PHP 数组变量之写时复制的要点 只有数组才有的概念。
  4. 二叉树的概念、算法简介及树的平衡
  5. 技术无罪?谷歌AI伦理团队负责人被解雇
  6. 每日程序C语言29-将数组逆序输出
  7. [转]软件保护之注册算法篇
  8. 下一个更大元素 I(LeetCode 496)
  9. 码农与UI沟通的日常
  10. TCP协议的三次握手和四次分手
  11. MySQL锁机制,行锁jingran加在索引上
  12. Matlab 【应用】【1】用Matlab找一组模拟波形的极值(含极大值、极小值、最大值)并在图中画出来
  13. hisicv200 exfat支持(转)
  14. pyplot.annatate
  15. Windows Nano Server VHD文件制作
  16. js操作select(添加、移除、获取select值)
  17. Android创建定时和周期任务
  18. 利用hdparm工具配合crontab使硬盘不用时休眠
  19. 【PPT】学术答辩163套模板
  20. 只需四天,从零开始选购笔记本电脑【转】【荐】

热门文章

  1. 【数理知识】co-inner-outer factorizations
  2. 【S操作】简单粗暴自动化免费文档存储备份方案
  3. 华为最新系统鸿蒙的意思,EMUI官微正式更名为HarmonyOS!华为鸿蒙系统的推出有何意义?...
  4. GPS系统跟踪捕获算法的Verilog实现
  5. Linux中expect实现自动登录
  6. Java杂记3—流程控制之条件
  7. 移动端H5页面高清多屏适配方案
  8. 我为什么还要造轮子?欠踹?Monk.UI表单美化插件诞生记!
  9. 如何让一个类可以被foreach枚举?
  10. CentOS-6.5安装配置Tengine