56_02 C++ 多态实例练习3 组装电脑

案例描述:

  1. 电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储) 
  2. 将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商
  3. 创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口
  4. 测试时组装三台不同的电脑进行工作

#include"inherit_10.h"

// CPU抽象类
class CPU
{
public:
	virtual void calculate() = 0;// 虚构函数
};
// 显卡抽象类
class VideoCard
{
public:
	virtual void display() = 0;// 虚构函数
};
// 内存抽象类
class Memory
{
public:
	virtual void storage() = 0;// 虚构函数
};

// 电脑类
class Computer
{
public:
	Computer(CPU* cobj, VideoCard* vobj, Memory* mobj)
	{
		this->_cpu = cobj;
		this->_vc = vobj;
		this->_mem = mobj;
	}
	~Computer()
	{
		// 释放CPU
		if (this->_cpu != NULL)
		{
			delete this->_cpu;
			this->_cpu = NULL;
		}
		// 释放显卡
		if (this->_vc != NULL)
		{
			delete this->_vc;
			this->_vc = NULL;
		}
		// 释放内存
		if (this->_mem != NULL)
		{
			delete this->_mem;
			this->_mem = NULL;
		}
	}

	// 运行电脑
	void work()
	{
		this->_cpu->calculate();
		this->_vc->display();
		this->_mem->storage();
	}

	CPU* _cpu; // CPU指针
	VideoCard* _vc; // 显卡指针
	Memory* _mem; // 内存指针
};

// 英特尔CPU
class Intel_CUP :public CPU
{
public:
	virtual void calculate()
	{
		cout << "英特尔CPU正在计算" << endl;
	}
};

// 英特尔显卡
class Intel_VC :public VideoCard
{
public:
	virtual void display()
	{
		cout << "英特尔显卡正在显示" << endl;
	}
};
// 英特尔内存条
class Intel_Mem :public Memory
{
public:
	virtual void storage()
	{
		cout << "英特尔内存正在储存" << endl;
	}
};

// 联想CPU
class Lenovo_CUP :public CPU
{
public:
	virtual void calculate()
	{
		cout << "联想CPU正在计算" << endl;
	}
};
// 联想显卡
class Lenovo_VC :public VideoCard
{
public:
	virtual void display()
	{
		cout << "联想显卡正在显示" << endl;
	}
};
// 联想内存条
class Lenovo_Mem :public Memory
{
public:
	virtual void storage()
	{
		cout << "联想内存正在储存" << endl;
	}
};

// 组装电脑
// 传入 CPU/显卡/内存 指针
void assemble_computer(CPU* _cpu, VideoCard* _vc, Memory* _mem)
{
	Computer computer(_cpu, _vc, _mem);
	computer.work();// 调用对象工作
	cout << endl;
}


void inherit_10_pointer()
{
	// lenovo computer (创建不同类型的指针对象,并传入形参)
	assemble_computer(new Lenovo_CUP(), new Lenovo_VC(), new Lenovo_Mem());
	// intel computer (创建不同类型的指针对象,并传入形参)
	assemble_computer(new Intel_CUP(), new Intel_VC(), new Intel_Mem());
	// 自定义组装(创建不同类型的指针对象,并传入形参)
	assemble_computer(new Intel_CUP(), new Intel_VC(), new Lenovo_Mem());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值