当前位置: 首页 > news >正文

类与对象-多态-案例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 类依赖于接口而非具体实现,使得代码更加灵活和可扩展。
http://www.lryc.cn/news/404222.html

相关文章:

  • try-with-resources 语句的用途和优点有哪些,它如何自动管理资源?
  • GraphRAG参数与使用步骤 | 基于GPT-4o-mini实现更便宜的知识图谱RAG
  • /秋招突击——7/21——复习{堆——数组中的第K大元素}——新作{回溯——全排列、子集、电话号码的字母组合、组合总和、括号生成}
  • matlab 异常值检测与处理——Robust Z-score法
  • Ubuntu 20安装JDK17和MySQL8.0
  • DC-1靶场打靶第一次!!!!冲冲冲!
  • 【LeetCode】填充每个节点的下一个右侧节点指针 II
  • mac无法清空废纸篓怎么办 mac废纸篓清空了如何找回 cleanmymac误删文件怎么恢复
  • 树上启发加点分治思想
  • 【iOS】类对象的结构分析
  • 接口性能优化思路
  • PyQt5 多线程编程详细教程
  • uniapp小程序上传pdf文件
  • Python酷库之旅-第三方库Pandas(036)
  • Python爬虫(2) --爬取网页页面
  • 【iOS】——探究isKindOfClass和isMemberOfClass底层实现
  • Python 热门面试题(七)
  • STM32项目分享:智能宠物喂食系统
  • 数据结构——栈的实现(java实现)与相应的oj题
  • linux修改时区为CST
  • 【Spring Security】初识Spring Security
  • 配置单区域OSPF
  • SQL中的游标是什么?
  • 7. LangChain4j如何使用统一api调用?
  • RPM、YUM 安装 xtrabackup 8 (mysql 热备系列一)包含rpm安装 mysql 8 配置主从
  • maven项目打成可运行的jar及pom中的依赖一同打包
  • Gettler‘s Screep World 笔记 Ⅰ
  • 联合体(union)的定义以及如何与结构体(struct)不同
  • 【Spark官方文档部分翻译】RDD编程指南(RDD Programming Guide)
  • 前端八股文 $set