尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C语言 - 继承

C语言 - 继承
📅 发布时间:2026/7/27 10:11:56

我们知道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的继承时,我们要把基础数据放在继承结构的首位,这样不管是数据强转、数据访问都不会有什么问题。

相关新闻

  • SpringBoot+ELK构建企业级日志管理系统实战
  • 【CTF-WEB-GET】从浏览器中分析get请求获取隐藏信息
  • 智能跳过片头片尾:让Jellyfin观影体验无缝衔接的艺术

最新新闻

  • 从零掌握Joern:基于代码属性图的自动化漏洞挖掘实战指南
  • TMS320C5506 DSP开发实战:内存映射寄存器与中断系统深度解析
  • 2026江南4-5日浪漫出游攻略|情侣专属苏沪杭江南古镇慢游纯玩旅行指南 - 纯玩旅游攻略指南
  • Python粒子系统实战:用Pygame实现烟花模拟动画
  • clDice Loss:医学影像分割中的拓扑保持损失函数详解
  • 江苏 2026 年模压电缆桥架优质供应商推荐:无锡市汉发电气有限公司 - 安互工业信息

日新闻

  • OpenClaw开源智能体网关:AI助手与即时通讯的完美融合
  • 写一个简单的sh脚本
  • 2026年 西安缝隙天线厂家:5G通信与车载天线专业定制供应商深度分析 - 卓企推荐

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号