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

案例描述:

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

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

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

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

案例分析:

在这里插入图片描述

代码实现:
#include<iostream>
#include<string>
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;

}
现象:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值