搜索
bottom↓
12
返回列表 发新帖
楼主: 广轻电气091

C 语言面向对象编程 - 封装

  [复制链接]

出0入0汤圆

发表于 2019-12-25 09:30:29 来自手机 | 显示全部楼层
为什么不用C++

出0入0汤圆

发表于 2019-12-25 13:44:23 | 显示全部楼层
感谢分享

出0入0汤圆

 楼主| 发表于 2019-12-25 14:40:54 | 显示全部楼层

大型的应用软件开发,建议使用支持面向对象特性的编程语言

出0入0汤圆

 楼主| 发表于 2019-12-25 14:41:16 | 显示全部楼层

感谢关注

出0入0汤圆

 楼主| 发表于 2019-12-25 14:41:52 | 显示全部楼层
zly_1980 发表于 2019-12-25 09:28
其实不是,最简单的就是c++只是把c语言的数据跟方法放在一个叫class的东西去了,在c语言里分成2个部分:一 ...

C++并没有那么简单

出0入0汤圆

发表于 2019-12-25 14:49:12 | 显示全部楼层

只是最简单的一个举例,不代表全部。

出0入0汤圆

发表于 2019-12-25 16:30:40 | 显示全部楼层
本帖最后由 jjj 于 2019-12-25 16:33 编辑

对象则是数据和动作的结合体。
你这只有数据,
typedef struct
{
  const char          *Name;
  uint8_t              ClassCode;  
  USBH_StatusTypeDef  (*Init)        (struct _USBH_HandleTypeDef *phost);
  USBH_StatusTypeDef  (*DeInit)      (struct _USBH_HandleTypeDef *phost);
  USBH_StatusTypeDef  (*Requests)    (struct _USBH_HandleTypeDef *phost);  
  USBH_StatusTypeDef  (*BgndProcess) (struct _USBH_HandleTypeDef *phost);
  USBH_StatusTypeDef  (*SOFProcess) (struct _USBH_HandleTypeDef *phost);  
  void*                pData;
} USBH_ClassTypeDef;
类似这样的,勉强称作对象

出0入0汤圆

发表于 2020-1-6 12:07:31 | 显示全部楼层
本帖最后由 L_Hongzhen 于 2020-1-6 12:08 编辑

顶一下!通过  结构体+函数指针的方式,可以实现了面向对象的编程思想,类似于C++的类。

出0入0汤圆

 楼主| 发表于 2020-1-6 13:06:37 | 显示全部楼层
jjj 发表于 2019-12-25 16:30
对象则是数据和动作的结合体。
你这只有数据,
typedef struct

文章最后说明了,并没有把函数放在结构体进行封装

出0入0汤圆

 楼主| 发表于 2020-1-6 13:07:08 | 显示全部楼层
L_Hongzhen 发表于 2020-1-6 12:07
顶一下!通过  结构体+函数指针的方式,可以实现了面向对象的编程思想,类似于C++的类。 ...

感谢关注!

出10入0汤圆

发表于 2020-1-19 15:54:58 | 显示全部楼层
Mr.D 发表于 2019-11-29 10:37
结构体里包含函数指针,应该挺常见的吧

这种写法不常见,调试的时候很头疼,不能调整,不能打断点,试试你就知道了

出0入8汤圆

发表于 2020-1-19 16:10:53 | 显示全部楼层
学习           

出0入0汤圆

发表于 2020-1-19 22:19:25 | 显示全部楼层
kevin_me 发表于 2019-11-29 09:32
想问一下 为什么结构体指针引用成员时,不用加(*),而一般的单个变量指针取值时要加(*)?

书上这么规 ...

《C语言程序设计(第四版)》

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2020-1-20 09:18:09 | 显示全部楼层
四叶草35 发表于 2020-1-19 15:54
这种写法不常见,调试的时候很头疼,不能调整,不能打断点,试试你就知道了 ...

这种做法在使用C语言编写的大型软件里面比较常见

出0入0汤圆

 楼主| 发表于 2020-1-20 09:18:25 | 显示全部楼层

感谢关注!

出0入0汤圆

发表于 2020-1-21 10:25:48 | 显示全部楼层
这个只能算是面向接口,new的地方需要传入 ** 指针的指针,

出675入8汤圆

发表于 2020-1-21 13:49:45 来自手机 | 显示全部楼层
c用了很多年了   实在不想改了  要改也改行 呵呵

出0入4汤圆

发表于 2020-2-7 14:02:50 来自手机 | 显示全部楼层
楼主位的例子一定要隐藏结构体声明内容的话,可以在create一个实例的时候返回一个类似Handle的值,所有的实例修改获取参数都需传递对应的handle值。windows很多资源和emwin窗口实例管理也是这样的,内部管理handle和实例指针的映射,具体实现可以参考下工厂模式。

出0入0汤圆

发表于 2020-2-7 14:17:02 | 显示全部楼层
感兴趣的同学可以了解一下GObject

出0入0汤圆

发表于 2020-2-7 15:49:05 | 显示全部楼层
多谢分享,学习

出0入0汤圆

 楼主| 发表于 2020-2-7 18:19:05 | 显示全部楼层
nic_911 发表于 2020-2-7 14:02
楼主位的例子一定要隐藏结构体声明内容的话,可以在create一个实例的时候返回一个类似Handle的值,所有的实 ...

感谢提供思路!

出0入0汤圆

 楼主| 发表于 2020-2-7 18:19:24 | 显示全部楼层
shwind 发表于 2020-2-7 15:49
多谢分享,学习

感谢关注

出0入0汤圆

 楼主| 发表于 2020-2-7 18:19:45 | 显示全部楼层
JeffreySun 发表于 2020-2-7 14:17
感兴趣的同学可以了解一下GObject

感谢建议!

出0入4汤圆

发表于 2020-3-3 14:56:09 来自手机 | 显示全部楼层
留个纪念。

出0入0汤圆

发表于 2020-8-11 17:58:31 | 显示全部楼层
面向对象是一种思想,,可这种思想好难,,,总觉得和面向过程没啥区别

出0入4汤圆

发表于 2020-8-14 17:12:11 | 显示全部楼层
路过,mark一下

出0入0汤圆

发表于 2020-11-8 15:33:08 | 显示全部楼层
不错,有时间过来细品

出0入4汤圆

发表于 2021-10-15 11:48:31 | 显示全部楼层
每次用句柄管理一个模块。
句柄我把它用成了类,但没有继承等C++那种功能。

句柄用宏定义定义。
##、#、...、是常用的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2023-2-7 20:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表