C语言面向对象编程

时间:2023-02-15 14:19:00

第一次写博客,希望是一个好的开始,谈谈自己最近对编程的想法,欢迎各位批评指正。C语言面向对象编程

最近随着程序代码量的增加,越发觉得面向对象编程的重要性。众所周知,c语言是一门面向过程的语言,但是这不妨碍我们以面向对象的思想编写程序。有人可能会觉得,这人真2B,直接用面向对象的语言编程不就行了么。不过我从事的是嵌入式开发,编程框架主要是用c语言实现的,因此也就不得不用c编程了。

一谈到面向对象,我们可能就会联想到什么继承,重载等等一系列面向对象的语言的特性,但是我这里谈到的面向对象没有这么复杂,主要谈的是一种编程的思想。或者说将以前c语言以模块划分,转换为以对象划分。

举一个例子,假设我们要编写一个俄罗斯方块的程序,我们就应该提取出几个类出来,包括:方块类、按钮类等等,这里的类,在c语言里面实际上以结构体+函数指针的方式实现。每个类拥有独立的.c和.h,方便移植。参考c++的构造函数和析构函数,每个类提供对应于构造函数和析构函数的接口函数,当然构造函数就不能放在结构体中了。写一个示例代码:

//=============================================================================

//========================方块类

//=============================================================================

typedef struct Box

{

//------成员变量

uint32_t boxType;

...

//------成员函数

void (*Free)(struct Box *pBox);//--析构函数(释放申请的内存)

...

}BOX;

void Box_Create(BOX *pBox); //--构造函数(初始化成员函数和变量)


如上,这样实现了对象的内存的管理,以及多对象的创建,虽然这里的函数指针感觉是浪费内存,但是却有助于我们的代码看上去更清晰,敲代码时更流畅,这点内存牺牲,我觉得是值得的。如果觉得这样无法保证成员函数和变量的安全,那仅仅需要将这个类进一步封装,以返回句柄的方式,并提供一系列操作句柄的函数,其实句柄就是这个结构体实例的地址,仅仅是转换为uint32_t类型,使外部无法知道该结构体的内部情况而已。

其实总结下来,这样写代码的好处,主要是能让我们养成一面向对象的方式编程的习惯,同时,编写出来的代码的可移植性会更好,也能降低代码之间的耦合程度,每个类在管理自己的内存,并检测对应的异常,这样也有助于使我们的代码能做单元测试。就简单谈谈,欢迎大家吐槽。C语言面向对象编程