C语言的OOP实践(OOC)

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

---硬着头皮看完了,可是感受仍是抽象有不理解的地方,感受用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方法
相关文章
相关标签/搜索