为了对c语言进行封装,笔者参考了lw_oopc等开源库,决定使用宏对结构体进行封装。
先说一下大致思想:通过宏,结构体和文件来实现封装。
大概步骤:抽象出类-> 使用lw_oopc库进行封装->定义接口封装底层实现 ->main主函数调用接口
顺便一提,笔者认为使用lw_oopc库最好在源文件,放在主函数会丧失封装性,放在头文件压根过不了编译器。在源文件实现后再大量定义接口。
以该文件为例,笔者将私有类放在源文件,然后在定义初始化的相关函数,比如initd(),这个函数隐藏了virtual_new函数,但是可以在头文件中声明,从而被调用,这就实现了接口。通过定义接口,可以选择提供的服务和细节,但是又可以隐藏内部实现。
在头文件中使用typedef进行重定义,可以达到模拟private的效果,但是除了不能直接访问该数据结构,并不影响定义指针然后分配内存。
至于public,直接在头文件中定义或者在main文件中定义就行了,这样可以直接访问内部成员。
不得不说,lw_oopc宏的用法十分新奇,笔者个人觉得提供了一种非常好的对象规范。
但是开源后随着不断更新和修改,在现在的新版本中,笔者甚至觉得有点臃肿了,不是十分好用。
让我们看看初始版本:
通过宏来写模板。c语言宏定义的本质是替换,可以看看下图,两者就是替换前后:
至此,封装的要素class,public,private已经大致实现,下一节笔者讲一讲继承。