组合和聚合

一、组合

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创建完毕后,不会运行析构函数。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值