一、组合
1.概念
组合的意思是从属关系,主体对象被销毁时,被组合的对象也要被销毁,例如:人(主体)与脑子
2.组合关系的设计思想
(1)主体创建时,主体的组合对象也要创建(初始化)。
(2)主体销毁时,主体的组合对象也要销毁。
3.组合关系实现
(1)被组合对象作为非指针类型的数据成员
声明方式如图1-1的brain1所示。
实现方式:
主体初始化时被组合对象初始化方法如下:
方法1:初始化列表如图1-2所示。
方法2:创建一个新的对象通过传值(合成的赋值构造函数)的方式来初始化如图1-3所示。
销毁
非指针类型的数据成员在主体被销毁时 他们也会自动销毁 不需要在主体的析构函数中销毁。
(2)被组合对象作为指针类型的数据成员
声明方式如图1-1heart1所示。
实现方式:
主体初始化时被组合对象初始化方法如下:
用new的方式创建一个指向被组合对象的指针并赋值给主体的指针类型的数据成员
销毁
指针类型的数据成员在主体被销毁时,他们不会自动销毁,必须在主体的析构函数中销毁(delete)如图1-4所示。
二、聚合
1.概念
聚合的意思是拥有关系,主体对象被销毁时,被聚合的对象仍然可以存在。例如:人(主体)与房子
2.聚合关系的设计思想
(1)主体创建时,主体的聚合对象不需要创建(初始化)。
(2)主体销毁时,主体的聚合对象也不需要销毁。
(3)需要设计聚合的接口(函数)
3.聚合关系实现
聚合的声明方式如图1-1的house1所示。
聚合的实现方式就是设计一个聚合的接口(函数)如图1-1的buyHouse()方法所示。
三、组合与聚合测试用例
测试用例:
源文件如图3-1所示。
运行结果:
如图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