2.8 组装计算机案例分析

H43724334 / 2024-03-20 / 原文

3月20号任务,对比示例代码,找到不足和错误,
更要注意思路问题!

#include<iostream>
using namespace std;


//案例描述
//电脑主要组成部件为CPU,显卡,内存条
//将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商提供cpu、nVidia厂商提供显卡、Samsung提供内存条
//创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口
//测试时组装三台不同的电脑进行工作


//1、先抽象出每个零件的类
class CPU 
{
	virtual void calculate() = 0;	//抽象计算函数
};

class VideoCard 
{
	virtual void display() = 0; //抽象显示函数 纯虚函数
};

class Memory
{
	virtual void storage() = 0; //抽象存储函数
};

//2、具体零件的厂商

//1.Intel厂商 生产cpu
class IntelCpu : public CPU
{
public:
	IntelCpu()
	{
		cout << "采用的是Intel的CPU" << endl;
	}
	virtual void calculate()
	{
		cout << "Intel的CPU开始计算了" << endl;
	}
	//纯虚析构函数
	virtual ~IntelCpu() = 0;
};
IntelCpu::~IntelCpu()
{
	cout << "IntelCpu 的纯虚析构函数调用!" << endl;
}


//2.Nvidia厂商,生产显卡
class Nvidia : public VideoCard
{
public:
	Nvidia()
	{
		cout << "采用的是Nvidia的显卡" << endl;
	}

	virtual void display()
	{
		cout << "Nvidia的GPU开始计算图形了" << endl;
	}

	virtual ~Nvidia() = 0;
};
Nvidia::~Nvidia()
{
	cout << "Nvidia 的纯虚析构函数调用!" << endl;
}

//3.Samsung厂商 生产内存条
class Samsung : public Memory
{
public:
	Samsung()
	{
		cout << "采用的是Sumsung的内存条" << endl;
	}

	virtual void storage()
	{
		cout << "Samsung的内存条开始存储数据了" << endl;
	}

	virtual ~Samsung() = 0;
};
Samsung::~Samsung()
{
	cout << "Samsung 的纯虚析构函数调用!" << endl;
}


//3、电脑类  用来组装电脑 继承于三大零件厂商
class Computer :public IntelCpu, public Nvidia, public Samsung
{
public:
	//构造函数 传入三个零件的 指针
	Computer(string cpu, string gpu, string memory)
	{
		//在堆区创建一个属性,用一个指针来维护
		m_cpu = new string(cpu);
		m_GPU = new string(gpu);
		m_memory = new string(memory);
	}

	//提供工作的函数 组装一台电脑
	void assemble()
	{
		//调用每个零件工作的接口
	 	calculate();
		display();
		storage();
	}

	//析构函数
	~Computer()
	{
		//if (m_cpu != NULL && m_GPU != NULL && m_memory != NULL)
		if(m_cpu != NULL)
		{
			cout << "这是computer的析构函数调用" << endl;
			delete m_cpu;
			m_cpu = NULL;
		}
		if (m_GPU != NULL)
		{
			cout << "这是computer的析构函数调用" << endl;
			delete m_GPU;
			m_GPU = NULL;
		}
		if (m_memory != NULL)
		{
			cout << "这是computer的析构函数调用" << endl;
			delete m_memory;
			m_memory = NULL;
		}
	}

public:
	string* m_cpu;		//指针类型属性
	string* m_GPU;
	string* m_memory;

};

//测试函数
void test()
{
	Computer* computer = new Computer("Intel", "Nvidia", "Sumsung");
	cout << "电脑的名称叫computer" << endl;
	computer->assemble();
	delete computer;
}

int main()
{
	test();
	return 0;
}