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

c生万物系列(封装)

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

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

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

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

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

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

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

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

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

让我们看看初始版本:

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android SurfaceFlinger——GraphicBuffer获取内存信息(三十一)
  • 【H.264】H.264详解(二)—— H264视频码流解析示例源码
  • 使用协程实现调用接口 验证抽奖概率
  • vue-快速入门
  • 周末两天我搭建了一个智能问答ai工具网站
  • vue3——利用自定义指令实现下拉框分页懒加载
  • 前端模块化CommonJS、AMD、CMD、ES6
  • MYSQL(2) 高级查询
  • sql注入 mysql 执行命令 sql注入以及解决的办法
  • C语言 #具有展开功能的排雷游戏
  • WHAT - 不同 HTTP Methods 使用场景、使用方法和可能遇到的问题
  • 力扣1089复写0
  • JVM 性能分析—— 一文带你读懂 G1 垃圾收集器收集流程
  • 鸿蒙应用框架开发【OpenGL三棱椎】 NDK
  • postgres数据库连接超时问题处理
  • Angular 4.x 动态创建组件
  • Elasticsearch 参考指南(升级前重新索引)
  • Facebook AccountKit 接入的坑点
  • HomeBrew常规使用教程
  • JAVA_NIO系列——Channel和Buffer详解
  • Js基础知识(一) - 变量
  • Median of Two Sorted Arrays
  • PaddlePaddle-GitHub的正确打开姿势
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • storm drpc实例
  • Terraform入门 - 1. 安装Terraform
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue 重置组件到初始状态
  • webpack4 一点通
  • 闭包,sync使用细节
  • 成为一名优秀的Developer的书单
  • 分布式任务队列Celery
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 工作手记之html2canvas使用概述
  • 基于webpack 的 vue 多页架构
  • 离散点最小(凸)包围边界查找
  • 智能网联汽车信息安全
  • MyCAT水平分库
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ## 基础知识
  • #ubuntu# #git# repository git config --global --add safe.directory
  • ${ }的特别功能
  • (10)ATF MMU转换表
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C语言)fread与fwrite详解
  • (Java入门)抽象类,接口,内部类
  • (编译到47%失败)to be deleted
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (转) Android中ViewStub组件使用
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Unity3DUnity3D在android下调试
  • (转)人的集合论——移山之道
  • (转载)虚函数剖析
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件