前言
1.组合
部分和整体之间具有相同的生命周期。部分类在整体类的构造函数中被构造,在析构函数中被析构。
2.聚合
部分与整体之间并没有相同的生命周期,整体消亡后部分可以独立存在。代码实现时,整体类中传入一个部分类的指针,部分类已经在整体类外被构造,因而在整体类析构的时候,部分类并没有被析构。
Computer.h
#pragma once
#include <string>
#include "CPU.h"
#include "VoiceBox.h"
class Computer{
public:
Computer(const char* cpuBrand,const char* cpuVersion);
~Computer();
void addVoiceBox(VoiceBox *);
private:
CPU cpu; //CPU与Computer之间是组合关系
//CPU *p_cpu;//组合关系也可以用指针实现,要在构造方法中用动态内存分配构造cpu,并在析构方法中释放
VoiceBox *voiceBox = NULL;//voiceBox与Computer是聚合关系
};
Computer.cpp
#include "Computer.h"
#include <iostream>
using namespace std;
Computer::Computer(const char *cpuBrand, const char *cpuVersion,const int memory) : cpu(cpuBrand,cpuVersion),memory(memory){
cout << "调用了Computer的构造函数" << endl;
}
/*Computer::Computer(const char *cpuBrand, const char *cpuVersion, const int memory) : memory(memory) {
this->p_cpu = new CPU(cpuBrand, cpuVersion);
cout << "调用了Computer的构造函数" << endl;
}*/
Computer::Computer(const int memory) : memory(memory) {
//this->p_cpu = new CPU;
cout << "调用了Computer的构造函数" << endl;
}
Computer::~Computer() {
//delete p_cpu;
cout << "调用了Computer的析构函数" << endl;
}
void Computer::addVoiceBox(VoiceBox *voiceBox)
{
this->voiceBox = voiceBox;
cout << "在computer中增加了voiceBox" << endl;
}