C++——多态经典案例(一)组装电脑

案例:小明打算买两台组装电脑,假设电脑零部件包括CPU、GPU和内存组成。

一台电脑使用intel的CPU、GPU和内存条

一台电脑使用Huawei的CPU、GPU和Intel的内存条

分析:使用多态进行实现

将CPU、GPU和内存条定义为抽象类,内部分别定义其对应功能的纯虚函数

Intel的CPU继承CPU,并实现其内部的纯虚函数(calculate)

Intel的GPU继承GPU,并实现其内部的纯虚函数(display)

Intel的MEMORY继承MEMORY,并实现其内部的纯虚函数(memory)

同样华为也一样继承CPU、GPU和MEMORY并实现对应的纯虚函数

封装一个Computer类,包含CPU、GPU和MEMORY,其成员属性为CPU、GPU和MEMORY的指针

内部有个work方法,用于调用CPU、GPU和MEMORY对应的方法

最后小明通过Computer类进行组装自己的电脑,并运行

cpp 复制代码
#include<iostream>
class CPU 
{
public:
	virtual void calculate() = 0;
};

class GPU
{
public:
	virtual void display() = 0;
};

class MEMORY
{
public:
	virtual void memory() = 0;
};


class Computer 
{
public:
	Computer(CPU *cpu,GPU *gpu,MEMORY *memory)
	{
		m_cpu = cpu;
		m_gpu = gpu;
		m_memory = memory;
	}

	void work() 
	{
		m_cpu->calculate();
		m_gpu->display();
		m_memory->memory();
	}

	~Computer()
	{
		if (m_cpu != NULL) 
		{
			delete m_cpu;
			m_cpu = NULL;
		}
		if (m_gpu != NULL)
		{
			delete m_gpu;
			m_gpu = NULL;
		}
		if (m_memory != NULL)
		{
			delete m_memory;
			m_memory = NULL;
		}
	}

private:
	CPU *m_cpu;
	GPU *m_gpu;
	MEMORY *m_memory;
};


class IntelCPU :public CPU
{
public:
	virtual void calculate()
	{
		std::cout << "IntelCPU is calculate..." << std::endl;
	}
};
class IntelGPU :public GPU
{
public:
	virtual void display()
	{
		std::cout << "IntelGPU is display..." << std::endl;
	}
};
class IntelMEMORY :public MEMORY
{
public:
	virtual void memory()
	{
		std::cout << "IntelMEMORY is memory..." << std::endl;
	}
};



class HuaweiCPU :public CPU
{
public:
	virtual void calculate()
	{
		std::cout << "HuaweiCPU is calculate..." << std::endl;
	}
};
class HuaweiGPU :public GPU
{
public:
	virtual void display()
	{
		std::cout << "HuaweiGPU is display..." << std::endl;
	}
};
class HuaweiMEMORY :public MEMORY
{
public:
	virtual void memory()
	{
		std::cout << "HuaweiMEMORY is memory..." << std::endl;
	}
};




int main(int argc,char **argv) 
{
	CPU *my_CPU = new IntelCPU;
	GPU *my_GPU = new IntelGPU;
	MEMORY *my_memory = new IntelMEMORY;

	Computer *my_computer = new Computer(my_CPU, my_GPU, my_memory);
	my_computer->work();
	delete my_computer;


	Computer* my_computer_2 = new Computer(new HuaweiCPU,new HuaweiGPU,new IntelMEMORY);
	my_computer_2->work();
	return 0;
}

运行效果:

相关推荐
FQNmxDG4S5 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
虹科网络安全5 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje6 小时前
Java语法进阶
java·开发语言·jvm
汉克老师6 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
rKWP8gKv76 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫6 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287926 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本6 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
yaoxin5211236 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
ACP广源盛139246256738 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑