多态案例-电脑组装

//电脑中有零件: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* cpu, VideoCard* vc, Memory* mem) {
		m_cpu = cpu;
		m_vc = vc;
		m_mem = mem;
	}
	//电脑工作,调用接口
	void Work(){
		m_cpu->calculate();		//电脑类中的CPU类指针调用接口
		m_vc->display();
		m_mem->storage();
	}
	~Computer() {
		if (m_cpu != NULL) {
			delete m_cpu;
			m_cpu = NULL;
		}
		if (m_vc != NULL) {
			delete m_vc;
			m_vc = NULL;
		}
		if (m_mem != NULL) {
			delete m_mem;
			m_mem = NULL;
		}

	}
private:
	//零件父类指针
	CPU* m_cpu;
	VideoCard* m_vc;
	Memory* m_mem;
};

//各种厂商提供的零件子类
class IntelCPU :public CPU {
public:
	void calculate() {
		cout << "Intel CPU Work!" << endl;
	}
};

class IntelVideoCard :public VideoCard {
public:
	void display() {
		cout << "Intel VideoCard  Work!" << endl;
	}
};

class IntelMemory :public Memory {
public:
	void storage() {
		cout << "Intel Memory Work!" << endl;
	}
};

class LenovoCPU :public CPU {
public:
	void calculate() {
		cout << "Lenovo CPU Work!" << endl;
	}
};

class LenovoVideoCard :public VideoCard {
public:
	void display() {
		cout << "Lenovo VideoCard  Work!" << endl;
	}
};

class LenovoMemory :public Memory {
public:
	void storage() {
		cout << "Lenovo Memory Work!" << endl;
	}
};

void test01(){
	CPU* intelCPU = new IntelCPU;
	VideoCard* intelCard = new IntelVideoCard;
	Memory* intelMem = new IntelMemory;
	Computer* computer1 = new Computer(intelCPU, intelCard, intelMem);
	computer1->Work();
	delete computer1;
}

int main() {
	test01();
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值