栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

建模的常用手段:组合与聚合

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

建模的常用手段:组合与聚合

说明:组合和聚合,不是C++的语法要求,是应用中的常用手段.

组合与聚合: 需求:

构建一个计算机类,一台计算机,由CPU芯片,硬盘,内存,外加一个音响.(CPU芯片也使用类来表示)

Computer.h
#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 之间,就是"组合"关系
	//Cpu* cpu;  //指针形式的
	int hardDisk;//硬盘 单位 G
	int memory;  //内存 单位 G
	VoiceBox* box;//音响 Computer和VoiceBox之间就是聚合关系
};
Computer.cpp
#include 
#include "Computer.h"

using namespace std;


Computer::Computer(const char* cpuBrand, const char* cpuVersion,
	int hardDisk, int memory):cpu(cpuBrand,cpuVersion) {
	//this->cpu = Cpu(cpuBrand, cpuVersion);//不高效
	this->hardDisk = hardDisk;
	this->memory = memory;
	//this->cpu = new Cpu(cpuBrand, cpuVersion);//记得在析构函数里面进行释放
	cout << __FUNCTION__ << endl;
	//cout << cpuBrand << cpuVersion << hardDisk << memory << endl;
}

void Computer::addVoiceBox(VoiceBox* box) {
	this->box = box;
}

Computer::~Computer() {
	cout << __FUNCTION__ << endl;
}

Cpu.h
#pragma once

#include 

using namespace std;

class Cpu{
public:
	Cpu(const char* brand = "intel", const char* version = "i5");
	~Cpu();
private:
	string brand;//品牌
	string version;//型号
};

Cpu.cpp
#include 
#include "Cpu.h"

Cpu::Cpu(const char* brand, const char* version) {
	this->brand = brand;
	this->version = version;

	cout << __FUNCTION__ << endl;
}

Cpu::~Cpu() {
	cout << __FUNCTION__ << endl;
	//delete cpu;
}
VoiceBox.h
#pragma once
class VoiceBox{
public:
	VoiceBox();
	~VoiceBox();
};

VoiceBox.cpp
#include "VoiceBox.h"
#include 

using namespace std;


VoiceBox::VoiceBox() {
	cout << __FUNCTION__ << endl;
}

VoiceBox::~VoiceBox() {
	cout << __FUNCTION__ << endl;
}

最后的输出结果:

说明一下:box没有进行初始化. 

小结: 组合:

在组合里面:被拥有的对象(芯片)的生命周期与其拥有者(计算机)的声明周期是一致的.

计算机被创建时,芯片也随之创建;

计算机被销毁时,芯片也随之销毁;

拥有者需要对被拥有者负责,是一种比较强的关系,是整体与部分的关系.

具体组合方式:

1)被组合的对象直接使用成员对象->Computer.h 中直接写 Cpu cpu;

2)使用指针表示被组合的对象,在构造函数中,创建被组合的对象;在析构函数中,释放被组合的对象.(此文中没有写到,文中提到的方式较常见,推荐使用)

聚合:

1)聚合不是组成关系,被包含的对象,也可能被其他对象包含.

2)拥有者不需要对被拥有的对象的生命周期负责.

今天的学习记录完毕!感谢欣赏,文章如有技术错误,欢迎大佬指正,谢谢!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872982.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号