首页 > 其他分享 >组合和聚合

组合和聚合

时间:2025-01-14 22:28:24浏览次数:3  
标签:主体 初始化 销毁 聚合 组合 对象 指针

一、组合

1.概念

组合的意思是从属关系,主体对象被销毁时,被组合的对象也要被销毁,例如:人(主体)与脑子

2.组合关系的设计思想

(1)主体创建时,主体的组合对象也要创建(初始化)。

(2)主体销毁时,主体的组合对象也要销毁。

3.组合关系实现

(1)被组合对象作为非指针类型的数据成员

声明方式如图1-1的brain1所示。

实现方式:

主体初始化时被组合对象初始化方法如下:

方法1:初始化列表如图1-2所示。

方法2:创建一个新的对象通过传值(合成的赋值构造函数)的方式来初始化如图1-3所示。

销毁

非指针类型的数据成员在主体被销毁时 他们也会自动销毁 不需要在主体的析构函数中销毁。

(2)被组合对象作为指针类型的数据成员

声明方式如图1-1heart1所示。

实现方式:

主体初始化时被组合对象初始化方法如下:

用new的方式创建一个指向被组合对象的指针并赋值给主体的指针类型的数据成员

销毁

指针类型的数据成员在主体被销毁时,他们不会自动销毁,必须在主体的析构函数中销毁(delete)如图1-4所示。

图1-1 Human类声明
图1-2 Human类重载构造函数实现
图1-3 Human类重载构造函数实现2
图1-4 Human类的析构函数

二、聚合

1.概念

聚合的意思是拥有关系,主体对象被销毁时,被聚合的对象仍然可以存在。例如:人(主体)与房子

2.聚合关系的设计思想

(1)主体创建时,主体的聚合对象不需要创建(初始化)。

(2)主体销毁时,主体的聚合对象也不需要销毁。

(3)需要设计聚合的接口(函数)

3.聚合关系实现

聚合的声明方式如图1-1的house1所示。

聚合的实现方式就是设计一个聚合的接口(函数)如图1-1的buyHouse()方法所示。

三、组合与聚合测试用例

测试用例:

源文件如图3-1所示。

图3-1测试用例源文件

运行结果:

如图3-2和图3-3所示。

图3-2初始化列表初始化非指针类对象
图3-3赋值构造法初始化非指针类对象

 

用例分析:

图3-3比图3-2的运行结果多了一行“大脑被销毁了”

这是因为使用赋值构造法初始化非指针类对象时,最先创建的非指针类对象brian(100)会被赋值给主体的被指针类对象brain1,在主体(human1)创建完毕之后brian(100)自动销毁,从而运行了一次析构函数。

但是如果是通过初始化列表初始化非指针对象时,不会创建新的对象,所以human1创建完毕后,不会运行析构函数。

所以,组合的非指针对象初始化最好使用初始化列表的方式进行初始化。

标签:主体,初始化,销毁,聚合,组合,对象,指针
From: https://blog.csdn.net/m0_61756911/article/details/145127429

相关文章

  • LeetCode:40.组合总和II
    跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!代码随想录LeetCode:40.组合总和II给定一个候选人编号的集合candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每......
  • 排列和组合的实现
    版权申明:本文为博主窗户(ColinCai)原创,欢迎转帖。如要转贴,必须注明原文网址http://www.cnblogs.com/Colin-Cai/p/10629908.html作者:窗户QQ/微信:6679072E-mail:6679072@qq.com每当学一门计算机语言,质数表、汉诺塔可以作为早期测试的话题之一。......
  • 【组合和时序逻辑杂记(1)】
    【1】.Verilog代码中,if语句注意事项;(1)always@(posedgeclk_i)begin    if(A) B<=16'h0;   C <=C+16'h1;end (2)always@(posedgeclk_i)begin   if(A)       B <=16'h0;      C<=C+16'h1;end上述(1)中......
  • 设计模式-组合模式
    组合模式(CompositePattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端可以统一地处理单个对象和对象集合。也就是说,它允许客户端将单个对象和组合对象(对象集合)作为相同的方式对待,从而简化了客户端的操作。组合模式的......
  • 我不允许还有人不知道这套学习工具组合拳!
    你好呀,我是歪歪。前段时间看到Google发布了2024年度Chrome浏览器插件:https://chromewebstore.google.com/collection/2024_favorites一共12个,涉及工作效率、娱乐、网购等多个方面,我个人也被种草了其中一个插件:沉浸式翻译这是一款免费的双语对照网页翻译插件,支持......
  • 深入探讨聚合函数(COUNT, SUM, AVG, MAX, MIN):分析和总结数据的新视野
    title:深入探讨聚合函数(COUNT,SUM,AVG,MAX,MIN):分析和总结数据的新视野date:2025/1/13updated:2025/1/13author:cmdragonexcerpt:在数据分析和数据库管理领域,聚合函数(AggregateFunctions)是获取数据总结和统计信息的关键工具。聚合函数如COUNT、SUM、AVG、M......
  • 深入探讨聚合函数(COUNT, SUM, AVG, MAX, MIN):分析和总结数据的新视野
    title:深入探讨聚合函数(COUNT,SUM,AVG,MAX,MIN):分析和总结数据的新视野date:2025/1/13updated:2025/1/13author:cmdragonexcerpt:在数据分析和数据库管理领域,聚合函数(AggregateFunctions)是获取数据总结和统计信息的关键工具。聚合函数如COUNT、SUM、AVG、M......
  • LeetCode 2275: 按位与结果大于零的最长组合题解
    LeetCode2275:按位与结果大于零的最长组合题解1.题目分析这道题目考察了位运算的基本概念和应用。我们需要在给定的数组中找出最长的子序列,使得这些数字进行按位与运算后的结果大于0。1.1关键概念按位与运算(&)两个二进制位都为1时,结果为1。只要有一个为0,结果就为0......
  • 第四章 链路聚合与生成树配置
    想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识,下次更新路由器基本配置与应用。我是一个萌新小白,有误地方请大家指正,谢谢^_^文章目录目录前言一、实验原理1.为什么使用链路聚合技......
  • 2025/1/12 力扣每日一题(2275.按位与结果大于零的最长组合)
    来源:力扣(LeetCode)链接:https://leetcode.cn/problems/largest-combination-with-bitwise-and-greater-than-zero/description/?envType=daily-question&envId=2025-01-12题目:对数组nums执行按位与相当于对数组nums中的所有整数执行按位与。例如,对nums=[1,5,3]来......