类与对象-多态-案例3-电脑组装具体实现

#include<iostream>
#include<string>
using namespace std;
//CPU
class CPU
{
public:
	virtual void calculate() = 0;
};
//显卡
class GraCard
{
public:
	virtual void graphics() = 0;
};
//存储
class Memory
{
public:
	virtual void memory() = 0;
};
class Computer
{
public:
	Computer(CPU* cpu, GraCard* gc, Memory* mem)
	{
		m_cpu = cpu;
		m_gc = gc;
		m_mem = mem;
	}
	//提供工作函数
	void work()
	{
		//让零件工作起来,调用接口
		m_cpu->calculate();
		m_gc->graphics();
		m_mem->memory();
	}

	~Computer()
	{
		if (m_cpu != NULL)
		{
			delete m_cpu;
			m_cpu = NULL;
		}
		if (m_gc != NULL)
		{
			delete m_gc;
			m_gc = NULL;
		}
		if (m_mem != NULL)
		{
			delete m_mem;
			m_mem = NULL;
		}
	}
private:
	CPU* m_cpu;
	GraCard* m_gc;
	Memory* m_mem;

};
//Inter厂商
class IntelCPU :public CPU
{
public:
	virtual void calculate()
	{
		cout << "Intel的CPU开始计算了" << endl;
	}
};
class IntelGraCard :public GraCard
{
public:
	virtual void graphics()
	{
		cout << "Intel的显卡开始显示了" << endl;
	}
};
class IntelMemory :public Memory
{
public:
	virtual void memory()
	{
		cout << "Intel的内存条开始存储了" << endl;
	}
};

//Dell厂商
class DellCPU :public CPU
{
public:
	virtual void calculate()
	{
		cout << "Dell的CPU开始计算了" << endl;
	}
};
class DellGraCard :public GraCard
{
public:
	virtual void graphics()
	{
		cout << "Dell的显卡开始显示了" << endl;
	}
};
class DellMemory :public Memory
{
public:
	virtual void memory()
	{
		cout << "Dell的内存条开始存储了" << endl;
	}
};
void test01()
{
	//第一台电脑零件
	CPU* intelCPU = new IntelCPU;
	GraCard* intelCard = new IntelGraCard;
	Memory* intelMem = new IntelMemory;

	cout << "第一台电脑" << endl;
	//创建第一台电脑
	Computer* computer1 = new Computer(intelCPU, intelCard, intelMem);
	computer1->work();
	delete computer1;

	cout << "第二台电脑" << endl;
	//创建第二台电脑
	Computer* computer2 = new Computer(new DellCPU, new DellGraCard, new DellMemory);
	computer2->work();
	delete computer2;

}

int main() {
	test01();
	
	return 0;
}
1. 抽象类和纯虚函数

在C++中,抽象类通过纯虚函数定义了接口,强制其派生类实现这些方法。CPUGraCardMemory 分别作为抽象基类,声明了纯虚函数 calculate()graphics()memory(),分别用于不同厂商的组件实现计算、图形显示和内存存储功能。

2. 多态性和动态绑定

Computer 类通过持有 CPU*GraCard*Memory* 指针实现了多态性。构造函数 Computer(CPU* cpu, GraCard* gc, Memory* mem) 接受这些抽象基类指针,允许在运行时绑定具体的 IntelCPUDellGraCard 等对象。在 work() 方法中,通过调用这些指针的虚函数实现了动态绑定,从而根据实际对象类型调用正确的函数。

3. 动态内存管理

代码展示了如何使用 newdelete 来动态创建和销毁对象,避免了静态分配带来的限制。在 main() 函数中,创建了两台电脑,分别使用了不同厂商的组件对象,而后通过 delete 安全释放了这些动态分配的内存,避免了内存泄漏。

4. 虚析构函数

Computer 类的析构函数是虚析构函数。这种设计确保在派生类的对象销毁时,能够正确调用派生类的析构函数,从而释放对象占用的资源

5. 设计原则应用
  • 单一职责原则:每个类专注于实现一个特定的功能,如 CPUGraCardMemory 分别负责计算、图形和存储。
  • 依赖倒置原则:通过抽象基类 CPUGraCardMemoryComputer 类依赖于接口而非具体实现,使得代码更加灵活和可扩展。

相关推荐

  1. 对象--案例3-电脑组装具体实现

    2024-07-21 01:38:03       19 阅读
  2. 案例三-电脑组装

    2024-07-21 01:38:03       55 阅读
  3. 《c++》案例一.电脑组装

    2024-07-21 01:38:03       30 阅读
  4. 对象、抽象、封装、继承、以及举例

    2024-07-21 01:38:03       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 01:38:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 01:38:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 01:38:03       45 阅读
  4. Python语言-面向对象

    2024-07-21 01:38:03       55 阅读

热门阅读

  1. OpenPyXL 写入 Excel 文件

    2024-07-21 01:38:03       15 阅读
  2. 量化机器人如何实现无缝交易?

    2024-07-21 01:38:03       17 阅读
  3. Redis 深度历险:核心原理与应用实践 - 读书笔记

    2024-07-21 01:38:03       16 阅读
  4. Head size 160 is not supported by PagedAttention.

    2024-07-21 01:38:03       16 阅读
  5. 数据仓库中的数据治理

    2024-07-21 01:38:03       19 阅读
  6. Piping(√)

    2024-07-21 01:38:03       15 阅读