C++ 学习之多态案例三 - 电脑组装

案例描述:

电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)

将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商

创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口

测试时组装三台不同的电脑进行工作

案例分析:

C++ 学习之多态案例三 - 电脑组装_第1张图片

代码实现:
#include
#include
using namespace std;


/********************抽象出基类************************/
class CPU
{
public:
	virtual void cpu() = 0;
};

class Video//显卡
{
public:
	virtual void video() = 0;
};

class Rom//内存
{
public:
	virtual void rom() = 0;
};

/*****************Intel的设备****************************/

class Intelcpu :public CPU
{
public:
	virtual void cpu()
	{
		cout << "Intel 的CPU ";
	}
};

class Intelvideo :public Video
{
public:
	virtual void video()
	{
		cout << "Intel 的Video ";
	}
};

class Intelrom :public Rom
{
public:
	virtual void rom()
	{
		cout << "Intel 的Rom ";
	}
};

/*****************DELL的设备****************************/

class DELLcpu :public CPU
{
public:
	virtual void cpu()
	{
		cout << "DELL 的CPU ";
	}
};

class DELLvideo :public Video
{
public:
	virtual void video()
	{
		cout << "DELL 的Video ";
	}
};

class DELLrom :public Rom
{
public:
	virtual void rom()
	{
		cout << "DELL 的Rom ";
	}
};

/**********************电脑类***********************/

class computer
{
public:

	computer(CPU* cpu, Video* video, Rom* rom)//构造函数把三个指针传进来
	{
		m_cpu = cpu;
		m_video = video;
		m_rom = rom;	   
	}

	void work()
	{
		m_cpu->cpu();     cout << "开始工作了" << endl;
		m_video->video(); cout << "开始工作了" << endl;
		m_rom->rom();     cout << "开始工作了" << endl;	
	}

	~computer()
	{
		if (m_cpu != NULL)
		{
			delete m_cpu;
		}
		if (m_video != NULL)
		{
			delete m_video;
		}
		if (m_rom != NULL)
		{
			delete m_rom;
		}
		cout << "电脑的析构函数" << endl;
	}

private:
	CPU* m_cpu;
	Video* m_video;
	Rom* m_rom;

};

void main()
{
	cout << "--------------------创建Intel电脑------------------------" << endl;
	//创建出Intel的零件
	CPU* c = new Intelcpu;
	Video* v = new Intelvideo;
	Rom* r = new Intelrom;

	//computer PC(c,v,r);//组装Intel的电脑
	//PC.work();   //实例化的方式会在程序结束后自动执行析构函数,删除对象

	computer* pc1 = new computer(c, v, r);//new的方式是程序员控制删除对象的时机的
	pc1->work();
	delete pc1;
	
	
	cout << "--------------------创建DELL电脑---------------------" << endl;

	//创建出DELL的零件
	c = new DELLcpu;
	v = new DELLvideo;
	r = new DELLrom;

	computer* pc2 = new computer(c, v, r);
	pc2->work();
	delete pc2;
	

	cout << "---------------------创建杂牌电脑----------------------" << endl;
	//攒出一台电脑,使用不同厂家的零件

	//new一个对象
	computer* pc3 = new computer(new Intelcpu, new DELLvideo, new Intelrom);//这种写法不用再去另创建指针了
	pc3->work();
	delete pc3;

}
现象:

C++ 学习之多态案例三 - 电脑组装_第2张图片

你可能感兴趣的:(C++,#,C++综合小项目,c++)