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方法