类与对象-多态-案例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.mzph.cn/pingmian/48438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSS】基本用法

一、CSS简介 层叠样式表&#xff08;CSS&#xff09;是一种用来表现HTML或XML文档样式的计算机语言&#xff0c;可以对网页中元素位置进行像素级精确控制。CSS的中文名称为层叠样式表&#xff0c;外文全称为Cascading Style Sheets&#xff0c;是计算机科学领域的一种技术。CS…

大学生跨保计算机--学习规划分享

写在前面 目标 绩点达到前三&#xff0c;修计算机双学位丰富简历&#xff0c;积极参与科研竞赛&#xff0c;提前为保研铺路 暑假 一个月时间&#xff0c;自学Python语言的基础语法&#xff0c;去B站找视频&#xff0c;为以后参加比赛打下一定的基础 开学后可能没有太多时间…

C语言函数:编程世界的魔法钥匙(2)-学习笔记

引言 注&#xff1a;由于这部分内容比较抽象&#xff0c;而小编我又是一个刚刚进入编程世界的计算机小白&#xff0c;所以我的介绍可能会有点让人啼笑皆非。希望大家多多包涵&#xff01;万分感谢&#xff01;待到小编我学有所成&#xff0c;一定会把这块知识点重新介绍一遍&a…

[Day 32] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI中的神經網絡技術 神經網絡&#xff08;Neural Networks&#xff09;是人工智能&#xff08;AI&#xff09;領域的一個重要分支&#xff0c;靈感來自於生物神經系統。本文將深入探討神經網絡的基本概念、結構、工作原理及其在AI中的應用&#xff0c;並通過Python代碼詳細解釋…

HarmonyOS Web组件(二)

1. HarmonyOS Web组件 官方文档 1.1. 混合开发的背景和好处 混合开发&#xff08;Hybrid Development&#xff09;是一种结合原生应用和Web应用的开发模式&#xff0c;旨在同时利用两者的优势。随着移动应用需求的多样化和复杂化&#xff0c;单一的开发方式往往难以满足所有…

sass版本更新,不推荐使用嵌套规则后的声明

目前在 Sass 中不推荐使用嵌套规则后的声明&#xff0c;在 为了通知用户即将进行的更改&#xff0c;并给他们时间进行更改 与之兼容的样式表。在未来的版本中&#xff0c;Dart Sass 将更改为 匹配纯 CSS 嵌套生成的顺序。Deprecation Warning: Sasss behavior for declarations…

对androidTestDebug 产物进行重新签名

在 Gradle 中&#xff0c;你可以通过以下步骤对子模块中的 androidTestDebug 产物进行重新签名操作&#xff1a; 1. 创建一个自定义的 Sign 任务 在主项目的 build.gradle 文件中&#xff0c;创建一个自定义任务来执行重新签名操作&#xff1a; task reSignAndroidTestDebug…

Pytorch学习笔记【B站:小土堆】

文章目录 1 基础环境配置&#xff08;CPU版&#xff09;2 PyTorch学习2.1 Dataset和DataLoader2.1.1 Dataset2.1.2 DataLoader 2.2 Tensorboardadd_scalaradd_imageadd_graph 2.3 Transforms2.3.1 ToTensor2.3.2 Normalize2.3.3 Resize2.3.4 Compose 2.4 torchvision中的数据集…

pnpm build打包时占内溢出

这两天在打包H5网页的时候失败&#xff0c;总是提示下方错误 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 严重错误&#xff1a;堆限制附近标记压缩无效分配失败 - JavaScript 堆内存不足 尝试了多种方法&…

Linux源码安装的Redis如何配置systemd管理并设置开机启动

文章目录 实验前提实验 实验前提 已完成源码安装并能正常启动redis /usr/local/bin/redis-server能正常启动redis 实验 vim /etc/systemd/system/redis.service内容如下&#xff1a; [unit] Descriptionredis-server Afternetwork.target[Service] Typeforking ExecStart/…

【Blockly图形化积木编程二次开发学习笔记】5.自动保存与恢复

文章目录 引用使用 引用 <script src"./blockly/appengine/storage.js"></script>使用 <script>window.setTimeout(BlocklyStorage.restoreBlocks, 0); // 从本地存储中恢复块BlocklyStorage.backupOnUnload(); // 用户离开页面时自动将块备份到…

基于radix4的booth乘法器设计

下述乘法器是基于radix 4的booth乘法器&#xff0c;常用于集成电路IC的乘法器设计。 支持位宽可设置支持signsign、signunsign、unsignsign、unsignunsign; // FHDR------------------------------------------------------------ …

降雨量预测 | Matlab基于ARIMA-RBF降雨量预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 降雨量预测 | Matlab基于ARIMA-RBF降雨量预测 注&#xff1a;程序和数据放在一个文件夹。 程序语言为matlab&#xff0c;程序可出预测效果图&#xff0c;指标图; 代码特点&#xff1a;参数化编程、参数可方便更改、代…

web前端学习笔记Day02

web学习Day02 一、页面布局 盒子模型 盒子将页面的所有标签都包含在了一个矩形区域content(内容区域)->padding(内边距区域)->border(边框区域)->margin(外边距区域) div标签: 一行只能显示一个&#xff08;独占一行&#xff09;width默认为父元素宽度&#xff0c…

Docker核心技术:Docker原理之Namespace

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Docker核心技术 系列文章&#xff1a;Docker原理之Namespace&#xff0c;其他文章快捷链接如下&#xff1a; 应用架构演进容器技术要解决哪些问题Docker的基本使用Docker是如何实现的 Docker核心技术&#xff1…

多模态AI:概念、用例、优势、挑战及发展未来

多模态实际上是在尝试复制人类的感知方式&#xff1a;我们将视觉、声音和触觉等感官输入结合起来&#xff0c;形成对现实的更细致入微的感知&#xff0c;并利用这些数据来做出决定或采取行动。多模态模式也在尝试做同样的事情。 多模态AI的应用范围正在不断扩大&#xff0c;那么…

【Spring】深入理解了IOC(控制反转)和DI(依赖注入)

学习时间&#xff1a;09&#xff1a;XX--10&#xff1a;28&#xff0c;50min 微信读书 今日学习Spring框架&#xff0c;有很大的收获&#xff0c;感觉是学习SpringBoot以来的一个里程碑&#xff0c;因为今天上午这50min理解了Spring框架的核心基础&#xff0c;控制反转&#x…

使用 useLazyAsyncData 提升数据加载体验

title: 使用 useLazyAsyncData 提升数据加载体验 date: 2024/7/19 updated: 2024/7/19 author: cmdragon excerpt: 摘要&#xff1a;本文介绍useLazyAsyncData函数在Nuxt 3中的使用&#xff0c;以提升数据加载体验。此函数支持异步获取数据并在组件中处理挂起与错误状态&…

生成式AI在IT领域的应用中,对产品,UI设计师,前端开发。后端开发,运维的影响?

生成式AI在IT领域的应用将对产品、UI设计师、前端开发、后端开发和运维等多个角色产生深远影响。 以下是对这些角色的具体影响、技术对比以及未来展望的分析&#xff1a; 产品经理 影响革新&#xff1a; 精准需求洞察&#xff1a;生成式AI深度挖掘市场数据与用户反馈&#xff0…

IOCTLance:一款针对x64 WDM驱动程序的漏洞检测工具

关于IOCTLance IOCTLance是一款针对x64 WDM驱动程序的漏洞检测工具&#xff0c;该工具来源于CODE BLUE 2023上展示的一个名为“使用符号执行和污点分析增强 WDM 驱动程序漏洞检测 ”的项目。该工具能够有效增强检测Windows驱动程序模型&#xff08;WDM&#xff09;驱动程序中各…