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方法
相關文章
相關標籤/搜索