C++多态案例:电脑组装

一、案例要求

 

 

二、实现思路

1、实现抽象零件类: CPU ,显卡,内存条

      抽象类里面需要纯虚函数 ,后面的子类中重写

2、电脑类

     电脑类需要接收各个零件的接口指针,组装成一个电脑实体,调用各个零件的函数

3、零件子类

     创建intel厂商生产的3个零件子类,分别继承上面3个抽象类

     创建Lenovo厂商生产的3个零件子类,分别继承上面3个抽象类

4、测试函数

      创建零件的对象,

      用这些零件创建电脑类的对象

      调用电脑类的工作函数

5、main主函数中,调用测试函数

 

 

三、具体代码

#include<iostream>
#include<string>
using namespace std;


//@file   : cppModel
//@author : wang
//@date   : 2021/3/29 10:03:49
//@brief  : 多态案例-电脑组装


//抽象零件类
class CPU 
{
public:
	virtual void Calculator() = 0; 

};

class VideoCard //显卡
{
public:
	virtual void Display() = 0;

};

class MemoryBank
{
public:
	virtual void Storage() = 0;

};


//电脑类 :需要调用各个零件的接口
class Computer
{
public:
	//接收指针
	Computer(CPU* cpu, VideoCard* video, MemoryBank* memory)
	{
		m_cpu = cpu;
		m_video = video;
		m_memory = memory;
	}

	//使用接口指针,提供工作的函数
	void Work()
	{
		m_cpu->Calculator();
		m_video->Display();
		m_memory->Storage();
	}

	//释放指针
	~Computer()
	{
		cout << "computer 析构函数" << endl<<endl;
		if (m_cpu != NULL)
		{
			delete m_cpu;
			m_cpu = NULL;
		}
		if (m_video != NULL)
		{
			delete m_video;
			m_video = NULL;
		}
		if (m_memory != NULL)
		{
			delete m_memory;
			m_memory = NULL;
		}
	}

private:
	CPU* m_cpu;
	VideoCard* m_video;
	MemoryBank* m_memory;

};

//零件的子类
//1、Intel厂商
class IntelCPU :public CPU
{
public:
	void Calculator()
	{
		cout << "Intel的CPU在计算" << endl;
	}
};


class IntelVideoCard :public VideoCard
{
public:
	void Display()
	{
		cout << "Intel的显卡在显示" << endl;
	}
};

class IntelMemoryBank :public MemoryBank
{
public:
	void Storage()
	{
		cout << "Intel的内存在存储" << endl;
	}
};


//2、Lenovo厂商
class LenovoCPU :public CPU
{
public:
	void Calculator()
	{
		cout << "Lenovo的CPU在计算" << endl;
	}
};


class LenovoVideoCard :public VideoCard
{
public:
	void Display()
	{
		cout << "Lenovo的显卡在显示" << endl;
	}
};

class LenovoMemoryBank :public MemoryBank
{
public:
	void Storage()
	{
		cout << "Lenovo的内存在存储" << endl;
	}
};





//测试函数
void test01()
{
	//第一台电脑的零件
	CPU* cpu01 = new IntelCPU;
	VideoCard* video01 = new IntelVideoCard;
	MemoryBank* memory01 = new IntelMemoryBank;

	//创建第一台电脑
	//使用new创建对象,必须准备一个指针来接收
	Computer *computer01 = new Computer(cpu01, video01, memory01);
	computer01->Work();
	delete computer01;


	//创建第二台电脑
	Computer* computer02 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemoryBank);
	computer02->Work();
	delete computer02;


	//创建第三台电脑
	Computer* computer03 = new Computer(new LenovoCPU, new IntelVideoCard, new IntelMemoryBank);
	computer03->Work();
	delete computer03;



}

int main()
{
	test01();
	system("pause");
	return 0;
}

 

 

四、注意事项

1、computer类中接收了零件指针,最好在它的析构函数里也释放掉这些指针

2、new创建的对象,必须用指针来接受

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值