C语言的OOP实践(OOC)

OOC 面向对象 C 语言编程实践 - 文章 - 伯乐在线http://blog.jobbole.com/105105/

---硬着头皮看完了,但是感觉还是抽象有不理解的地方,感觉用C实现OOP好难啊,记得以前在上海英特尔,UEFI BIOS就是用INTEL内部封装的C实现的,IOS开发的ObjectiveC也是用的面向对象C:

/*

* 第一,封装

*/

// 在C中可以用struct来封装数据,如果是方法,我们就需要用函数指针存放到struct里面来模拟。

// 1.封装数据

typedef struct Drawable Drawable;

struct Drawable

{

float positionX;

float positionY;

};

// 2.封装方法:采用函数指针存放到struct里来模拟方法的封装

typedef struct

{

Drawable* (*Create) ();

void (*Init) (Drawable* outDrawable);

} _ADrawable_;

extern _ADrawable_ ADrawable[1];

/*

*方法的具体定义 : 这里给变量分配内存和初始化

*/

static void InitDrawable(Drawable* drawable)

{

drawable->positionX = 0.0f;

drawable->positionY = 0.0f;

}

static Drawable* Create()

{

Drawable* drawable = (Drawable*) malloc(sizeof(Drawable));

InitDrawable(drawable);

return drawable;

}

// 这里的Init类似于 java中的 构造函数

static void Init(Drawable* outDrawable)

{

InitDrawable(outDrawable);

}

// 这里 ADrawable[1] 就是一个对象,里面封装两个方法

_ADrawable_ ADrawable[1] = {Create, Init};

// 数据我们封装在Drawable结构里,通过Create可以再堆上创建需要自己free,Init是在栈上创建

// 函数封装在ADrawable这个全局单例对象里,由于没有this指针,所有方法第一个参数需要传入操作对象

// Create和Init方法将会管理,对象的数据初始化工作。如果对象含有其它对象,就需要调用其Create或Init方法

 

查看原文