简单来说就是在类里面定义其它类的对象
头文件1:
Computer头文件
#pragma once
#include "Cpu.h"
class Computer {
public:
Computer(const char *cpu_type, const char *cpu_parameter, const int hard_disk, const int memory);
~Computer(void);
private:
Cpu cpu; // Computer 和 Cou 是 “组合” 关系
//Cpu *cpu;
int hard_disk; // 硬盘
int memory; // 内存
VoiceBox *box;
};
Computer 文件
#include "Computer.h"
#include <iostream>
Computer::Computer(const char *cpu_type, const char *cpu_parameter,
const int hard_disk,const int memory):cpu(cpu_type, cpu_parameter) {
this->hard_disk = hard_disk;
this->memory = memory;
//this->cpu = new Cpu(cpu_type, cpu_parameter);
cout << __FUNCTION__ << endl;
}
Computer::~Computer(void) {
//delete cpu;
}
头文件2:
Cpu头文件
#pragma
#include <string>
using namespace std;
class Cpu {
public:
Cpu(const char *cpu_type, const char *cpu_parameter);
~Cpu(void);
private:
string cpu_type; // 型号
string cpu_parameter; // 参数
};
Cpu文件
#include "Cpu.h"
#include <iostream>
Cpu::Cpu(const char *cpu_type, const char *cpu_parameter) {
this->cpu_type = cpu_type;
this->cpu_parameter = cpu_parameter;
cout << __FUNCTION__ << endl;
}
Cpu::~Cpu(void) {
}
main文件
#include <iostream>
#include <Windows.h>
#include "Computer.h"
using namespace std;
int main(void) {
Computer c1("internex", "i7", 500, 8);
system("pause");
return 0;
}
小结:
被拥有的对象(芯片)的生命周期与其拥有者(计算机)的生命周期是一致的。
计算机被创建时,芯片也随之创建。
计算机被销毁时,芯片也随之销毁。
拥有者需要对被拥有者负责,是一种比较强的关系,是整体与部分的关系。
具体组合方式:
1)被组合的对象直接使用成员对象。(常用)
2)使用指针表示被组合的对象,在构造函数中,创建被组合的对象;在析构函数中,释放被组合的对象。
UML中的组合表示:
注意包含者使用实心菱形
【补充】UML画图工具:starUML