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类型,使外部无法知道该结构体的内部情况而已。

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习C语言的好书. OOPC是指OOP(Object-Oriented Programming)与C语言的结合,它是一个面向对象C语言编程框架。它是一套C语言的宏,定义了OOP概念的关键字,借助于这一套宏,实现面向对象的特性,如类、对象、继承、接口、多态、消息等。   C++对于大型软件架构的良好可控性,和对以后程序员维护代码时良好的可读性;然而就目前来说,在嵌入式领域广泛的使用C++显然是不现实的事情。一般的嵌入式系统开发中只用到了其中的一小部分功能,而不需要全部的机制,比如多重继承、运算符重载等。因此,许多嵌入式系统的开发者就舍弃了C++的庞大身躯而回归到精简的C环境中。 一般情况下,一个更容易扩展、维护的软件通常采用的是OOP的思想,添加一个原本不存在的相对无关单独的个体,总比在一个已经存在的过程内硬塞进去一个对象要简单;而且面向过程更容易导致混乱的维护。然而舍弃C++的同时也舍弃了珍贵的OOP能力,实在太可惜了。 C语言良好的可移植性,对内存等良好的操作性以及执行之速度均是一般嵌入式产品的不二首选。我们要应此放弃C++吗?当然不,幸好已经有很多优秀的设计师为我们指明了C语言OOP化的道路。 虽然OOPC语法不如C++那么简洁,但是OOPC也有亮丽的特色,就是编译后的程序所占的内存空间比C++小的多,执行效率高,适用于Embedded System。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值