在C語言中,沒有直接支持面向對象編程的語法特性,但可以通過結構體和函數指針來模擬對象和對象之間的交互。
首先,定義一個結構體來表示對象的屬性和方法:
typedef struct {
int data;
void (*print)(void*);
} Object;
在上面的代碼中,Object
是一個結構體類型,包含一個 data
屬性和一個函數指針 print
,該函數指針指向一個接收 void*
類型參數并返回 void
的函數。
然后,定義一個函數來初始化對象:
void init(Object* obj, int data, void (*print)(void*)) {
obj->data = data;
obj->print = print;
}
在上面的代碼中,init
函數接收一個 Object
類型指針 obj
,一個 data
參數和一個函數指針 print
,并將這些值分別賦給對象的屬性。
接下來,定義一個函數來調用對象的方法:
void callMethod(Object* obj) {
obj->print(obj);
}
在上面的代碼中,callMethod
函數接收一個 Object
類型指針 obj
,并調用對象的 print
方法。
最后,定義一個函數來打印對象的屬性:
void printData(void* obj) {
Object* o = (Object*) obj;
printf("Data: %d\n", o->data);
}
在上面的代碼中,printData
函數接收一個 void*
類型參數,并將其轉換為 Object*
類型指針,然后打印對象的 data
屬性。
使用示例:
int main() {
Object obj;
init(&obj, 10, printData);
callMethod(&obj);
return 0;
}
在上面的代碼中,我們首先創建一個 Object
類型的變量 obj
,然后調用 init
函數來初始化該對象,然后調用 callMethod
函數來調用對象的方法,最后輸出對象的屬性。