C語言面向對象編程
1. 定義一個SuperObject結構體, 里面包含最少的元素, 但是確實每一個對象都含有的, 這樣可以實現多態2. 每一個對象都是基于類的, 我們知道類都是單例對象, 所以我們創建結構體, TypeObject(類似于Java中的class), 接著每一個Object結構體中
都包含著一個對應類型的TypeObject指針, 比如"Hello world"這一個字符串對象所對應的結構體中有一個StrTypeObject示例, 這個StrTypeObject
是由我們定義的TypeObject結構體創建的, 當然萬物皆為對象, 所以還有MegaTypeObject作為TypeObject結構體的實例3. 注意: 在所有的Object結構體中, 都要SuperObject中所定義的所有的數據(主要是refcount, type_ptr(指向對應的class對象, 這里就是一
個單例的, 所以方法就是在這里的, static修飾的東西也都在這里, 多態的實現也是在這里, 因為多態主要是為要用方法服務的)), 內置的對象都是靜態的4. 用戶定義的類, 則是需要動態通過TypeObject這個結構體創建出來的, 用戶所定義的方法也要在該TypeObject中保存起來, 用于以后的調用, 其實
在Java中至于對象有關的屬性, 在這里原來的SuperObject因為包含的元素太少了不能滿足我們的需求, 我們需要在定義一個含有一個dict的BasicSuperO
bject結構體, 通過一個dict, 以"屬性名":屬性名值的形式來實現對每一個對象的屬性保存, 而方法則在TypeObject中的dict中, 也通過類似的方法存儲5. 通過以上的幾點我們知道, 在TypeObject中定義方法和屬性, 對應于Java中的static修飾的函數和屬性, 都是與class有關, 與instance無關的,
而在BasicObject中定義的則是至于instance有關的6. 在TypeObject中需要內置一些方法, 讓每一個對象都有對應的處理操作, 實現繼承可以:1. 數值處理的函數的結構體2. 序列處理的函數的結構體3. 映射處理的函數的結構體則系統每一種內置對象分別填充對應的結構體函數指針, 并也在dict中存儲, 這樣在調用時就可以統一的調用了7. 為了有個性#define BUXAPI(return_type) return_typeBUXAPI(SuperObject *) so_dome();這樣就告訴用戶這是我們自己的API, 你們可以調用8. 需要內置的對象:int, float, string, mapping(命名空間中非常重要), list, stack, type9. 目錄結構:Include, Objects, Tools, Doc, Demo, Lib, Module10. 在面向對象中, 對象之間的操作符, 應該都轉為函數的操作11. 在Map中比較中應該調用每一個對象的equal方法, 如果類型不同則為false, 相同則比較真正比較的值, 返回一個內置的None對象12. 遇到變量的重復定義, 使用extern關鍵字, 這個時候可以使用一個宏定義#define JCAPI_DATA(datatype) extern datatype 使得表達更加的直觀
其他
1. 在C語言中定義了一個全局變量, 如果要直接為該全局進行賦值, 那么必須要賦常量值:0, NULL, "string", 如果要賦變量的值, 需要在函數中賦值
2. 雖然這里講的是面向對象的編程但是我在這里寫的是一些技巧的東西如果有多個函數都結構相同的參數列表, 并且特別的長, 我們可以使用struct封裝參數列表, 這樣函數的參數列表就會簡明一些, 為了方便構造結構體, 我們可以通過一個宏或者函數來創建該結構體3. C語言中要想實現foreach, 可以說使用宏定義#define for_each(s) \List *tmp = s.lists;調用時for_each() {...code...}