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

C语言 - 继承

我们知道C++ 的三大特性就是封装、继承、多态,同时这也是面向对象的重要特性,在这些特性的基础上我们在结合一些设计模式,这样我们的项目就变得高内聚,低耦合同时也增强了代码的安全性,可读性,可维护性。

我们在学习Linux内核代码的时候就会发现其实里面已经广泛利用C语言实现了这些特性,下面我们一起来学习一下怎么用C语言来实现这些面向对象的特性。

这一章我们先来聊聊继承,我们通过LED来举例,我们分别有3个LED,GPIO灯、PWM灯、I2C灯三个Struct抽出来我们发现会有很多是相似的,如图:

我们发现其中name、state是一模一样的,如果我们加入第四种,改一次name的逻辑,三个都要改,但凡是改漏一个就出现了bug,怎么办?

这时候我们把相同的部分抽出来,生成一个LedBase,然后放进其他3个struct,如下图

Struct里面放另一个Struct,就有点类似俄罗斯套娃,外层包着内层,有细心的小伙伴就发现了一个细节,公共部分都是放在了第一个位置,我们先来看看这样抽出来套娃后,在内存地址中是咋样的,如图

所以套娃后就是内存数据在前,外层数据紧跟其后连续排列,经过我们上面的改造后初始化也不用重复了,先初始化公众的再初始化模块的,如图

不只是数据,函数也是能共享的,例如我们要获取当前是哪个模块再使用,那么写了一个

const char *get_led_name(LedBase *me) {return me->name;}

我们通过如下调用:

get_led_name(&gpio_led.base);get_led_name(&pwm_led.base);get_led_name(&i2c_led.base);

在3个LED模块中调用这个get_led_name就会返回不同的名称, 这样三个LED都使用了同一个函数,写一次3种led都能用,只要传base的地址过去,函数其实不需要知道你是哪一种led。

在实践中我们会发现,继承不只是数据共享,行为也能共享,所以继承本质并不是为了少些代码,而是为了少改代码,只是在我们平时的使用过程中也要注意,在设计使用C的继承时,我们要把基础数据放在继承结构的首位,这样不管是数据强转、数据访问都不会有什么问题。

http://www.jsqmd.com/news/1273343/

相关文章:

  • 本地人卖金避坑完整版指南2026 全南县黄金回收深度实测 - 行行星
  • 自适应共演系统:第一代面向社会系统的调控模型(乐观范式)深度研究报告
  • Nucleus Co-op:终极免费分屏工具,轻松实现PC游戏本地多人联机
  • 从异或加密入门:原理、Python实现与安全边界探讨
  • 如何将普通键盘变成机械键盘?Mechvibes音效模拟器给你答案
  • 深耕盘锦 20 年,熙和装饰拿下满分 10 分 S + 级 - 新闻快传
  • SpringBoot+ELK构建企业级日志管理系统实战
  • 怎么买高铁票能省钱?掌握正确购票方式,出行成本直接降低 - 工具软件使用方法推荐
  • 深入解析串行Flash Loader:嵌入式固件更新的核心机制与实战
  • 三步搭建你的AI股票分析团队:TradingAgents-CN完全指南
  • 智能跳过片头片尾:让Jellyfin观影体验无缝衔接的艺术
  • 基于YOLOv8的药物识别系统开发与应用
  • 5分钟搞定家庭监控:go2rtc让你的摄像头变身智能直播中心
  • 【CTF-WEB-GET】从浏览器中分析get请求获取隐藏信息
  • SpringBoot3+Vue3+MySQL 高校学生创新创业管理平台源码前后端分离实战
  • CAN总线驱动开发实战:中断处理与位定时配置详解
  • 深入解析CAN总线协议与Stellaris微控制器实战配置
  • 大模型量化技术:从原理到工程实践
  • TMS320VC5416 DSP三大核心外设:时钟、定时器与DMA协同设计实战
  • 深入解析Cortex-M3异常与中断:从NVIC原理到实战调试
  • 云服务如何重塑AI教育:从架构革新到教学实践
  • Intro Skipper:5分钟实现Jellyfin智能跳过片头的完整指南
  • Dify企业版私有化部署的7道安全门:从零信任到国密加密的完整指南
  • Spring AI 微服务冷启动优化:GraalVM 原生镜像从 3 秒到 60 毫秒的踩坑手记
  • Spring Boot 3 + Vue 3 个人理财系统源码 前后端分离实战
  • CNN-LSTM混合模型在股票预测中的工程实践
  • C++ std::string底层实现:SSO优化与内存管理原理详解
  • Java AI 代码审查工具选型:为什么我们放弃了 Claude 3 选择飞算JavaAI
  • 2026广元全屋渗漏修缮实用指南|三大正规修缮机构横向测评 - 筑宅安
  • 未命名文章