c生万物系列(封装)

news/2024/11/14 12:40:34/

为了对c语言进行封装,笔者参考了lw_oopc等开源库,决定使用宏对结构体进行封装。

先说一下大致思想:通过宏,结构体和文件来实现封装。

大概步骤:抽象出类-> 使用lw_oopc库进行封装->定义接口封装底层实现 ->main主函数调用接口 

顺便一提,笔者认为使用lw_oopc库最好在源文件,放在主函数会丧失封装性,放在头文件压根过不了编译器。在源文件实现后再大量定义接口。

以该文件为例,笔者将私有类放在源文件,然后在定义初始化的相关函数,比如initd(),这个函数隐藏了virtual_new函数,但是可以在头文件中声明,从而被调用,这就实现了接口。通过定义接口,可以选择提供的服务和细节,但是又可以隐藏内部实现。

在头文件中使用typedef进行重定义,可以达到模拟private的效果,但是除了不能直接访问该数据结构,并不影响定义指针然后分配内存。

至于public,直接在头文件中定义或者在main文件中定义就行了,这样可以直接访问内部成员。

不得不说,lw_oopc宏的用法十分新奇,笔者个人觉得提供了一种非常好的对象规范。

但是开源后随着不断更新和修改,在现在的新版本中,笔者甚至觉得有点臃肿了,不是十分好用。

让我们看看初始版本:

通过宏来写模板。c语言宏定义的本质是替换,可以看看下图,两者就是替换前后:

至此,封装的要素class,public,private已经大致实现,下一节笔者讲一讲继承。


http://www.ppmy.cn/news/1501408.html

相关文章

Canvas 的进度条操作及代码

canvas需要进度条么?答案显然是肯定的。我们的页面如果放到服务器上,图片的下载将是相当漫长的一个过程。如果我们不进行预加载就开始执行动画的话,那么用户肯定看不到理想的效果。 今天和大家探讨canvas动画框架之图片预加载,如上…

【音视频】RTSP、RTMP与流式传输

文章目录 前言RTSP与RTMPRTSP(Real-Time Streaming Protocol)RTMP(Real-Time Messaging Protocol)主要差异 什么是流式传输?流式传输的特点流式传输与传统下载的区别 使用VLC播放RTSP监控 总结 前言 在现代网络环境中…

【解决方案】华普微汽车智能钥匙解决方案

一、方案概述 1.什么是被动式无钥匙进入 "被动式无钥匙进入"(Passive Keyless Entry)是一种用于车辆、建筑物或其他设施的访问控制系统。它利用无线射频技术自动判断用户是否接近,并进行身份识别以执行开锁或落锁动作&#xff0c…

VSCode 命令行使用 git commit 无法输入中文

1. 问题描述 在使用 VSCode 的集成终端(Terminal)进行 git commit -m feat:xxx 操作时,发现 xxx 的位置只能编写英文,无法输入中文或者输入中文后出现问题。 这通常与终端编码设置、VSCode 的配置或者操作系统设置有…

InternLM-L0 Python作业

任务类型 任务内容 闯关任务 Python实现wordcount 闯关任务 Vscode连接InternStudio debug笔记 1. Python实现wordcount 基于作业 InternLM-L0 linux作业 ,创建Python文件输入如下代码,并用Python 脚本运行: text """ Go…

BCH码误码率ber性能仿真(MATLAB)

BCH码 不同于奇偶校验码只能检验数据传输是否出错,BCH码可以实现对数据的检验和纠错 BCH(n,k)中的n代表总码元,k代表有效码元,相应的n-k即代表纠错码元 本文着重比较分析BCH(255,207),BCH(255,131),BCH(255…

【redis】一致性hash算法和hash槽

普通hash取模 直接hash(key)%N , N为机器的数量,但不利于集器扩容或者缩容 一致性hash算法和hash槽 一致性hash算法是在redis 分片中使用,hash槽在redis cluster(集群)中使用 Redis一致性hash:Redis一致性hash是为…

福昕高级PDF编辑器专业版 v2024 授权版

福昕高级PDF编辑器是一款功能强大的PDF文件编辑软件,提供多种实用的编辑功能。 软件功能: 1. PDF文档编辑:用户可编辑PDF文档内容,包括文字、图片、表格、图形等,且不会对原有文本内容造成影响。 2. 批注工具&#x…