C++之类的组合关系

什么是类的组合关系

类的组合关系说通俗点就是在类里面定义另一个类,类对象和被包含的对象是同生共死,是包含关系。就相当于电脑类和CPU类的关系。

组合关系怎么用

在第一个类的成员函数中,被包含的对象可以调用自己的成员函数。第一个类的头文件必须包含第二类的头文件。
被包含的得对象初始化通过第一个对象的构造函数的初始化列表进行初始化。
如:

//computer.h
#pragma once
#include<iostream>
#include"cpu.h"

using namespace std;

class computer {
private:
	int memory;
	int hardDisk;
	cpu ccpu;
public:
	computer(int memory, int hardDisk, const char *Iname, const char *Iera);
	void show();
};
//computer.cpp
#include "computer.h"
computer::computer(int memory, int hardDisk, const char *Iname, const char *Iera) 
:ccpu(Iname, Iera) {
	this->memory = memory;
	this->hardDisk = hardDisk;
	std::cout << "调用computer构造函数" << endl;
}
void computer::show() {
	cout << "----------------" << endl;
	cout << "内存为:" << memory << endl;
	cout << "硬盘为:" << hardDisk << endl;

	//咋能这样调用呢?cout << 后只能接变量,如果ccpu.show1() 改造下,返回字符串就可以
	cout << "Cpu名字为:" << ccpu.show1() << endl;
	cout << "硬盘代数为:" << ccpu.show2() << endl;
}

//cpu.h
#pragma once
#include<iostream>
#include<string>

class cpu {
private:
	std::string Iname;
	std::string Iera;
public:
	cpu(const char* Iname="Intel", const char* Iera="i9");
	std::string show1();
	std::string show2();
};
//cpu.cpp
#include "cpu.h"
cpu::cpu(const char* Iname, const char* Iera) {
	this->Iname = Iname;
	this->Iera = Iera;
	std::cout << "调用CPU构造函数" << std::endl;
}
std::string cpu::show1() {
	//std::cout << Iname << std::endl;
	return Iname;
}
std::string cpu::show2() {
	//std::cout << Iera << std::endl;
	return Iera;
}
//main.cpp
#include <iostream>
#include"computer.h"
void test() {
	computer a(8, 1000, "因特尔", "第九代");
	a.show();
}
int main() {
	test();
	system("pause");
}
### C++ 中类的组合使用方法 在 C++ 中,类的组合是一种常见的设计方式,用于实现“has-a”的关系。这种关系通过在一个类中嵌套另一个类的对象来体现。以下是关于如何在 C++ 中使用类的组合的具体说明以及示例。 #### 1. 基本概念 类的组合指的是一个类内部包含其他类的对象作为其成员变量。这种方式可以用来模拟现实世界中的部分-整体关系[^3]。例如,在计算机的例子中,`Computer` 类可能包含 `CPU` 和 `Memory` 对象,这表明一台计算机拥有 CPU 和内存。 #### 2. 示例代码展示 下面是一个简单的例子,展示了如何在 C++ 中实现类的组合: ```cpp #include <iostream> using namespace std; // 定义子类:CPU class CPU { public: void process() const { cout << "CPU is processing..." << endl; } }; // 定义子类:Memory class Memory { private: int sizeMB; public: Memory(int s) : sizeMB(s) {} void displaySize() const { cout << "Memory Size: " << sizeMB << " MB" << endl; } }; // 定义父类:Computer,其中包含了 CPU 和 Memory 的实例 class Computer { private: CPU cpu; // 组合关系:Computer has a CPU Memory memory; // 组合关系:Computer has a Memory public: Computer(int memSize) : cpu(), memory(memSize) {} void run() const { cout << "Running the computer:" << endl; cpu.process(); memory.displaySize(); } }; int main() { Computer myPC(8000); // 创建一个具有 8GB 内存的计算机 myPC.run(); // 调用运行功能 return 0; } ``` 在这个例子中: - `CPU` 是一个独立的类,负责处理数据。 - `Memory` 是另一个独立的类,存储并显示内存大小。 - `Computer` 类则通过在其内部声明 `CPU` 和 `Memory` 的对象实现了组合关系。 当创建 `Computer` 的实例时,会自动初始化它的成员对象 `cpu` 和 `memory`,体现了它们之间的紧密联系。 #### 3. 关于生命周期管理 需要注意的是,在组合关系下,容器类(这里是 `Computer`)对其成员对象有完全控制权。这意味着这些成员对象的生命期由外部容器决定;一旦销毁容器,则所有成员也会随之销毁。 #### 4. 扩展到更复杂的设计模式 如果希望进一步扩展此模型以支持更加灵活的功能结构,比如树形层次的数据表示形式,则可考虑采用 **组合模式** 来构建系统[^2]。例如前面提到过的文件系统的案例就是典型的应用场景之一。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生乔克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值