
嚴格來說C語言是一門面向過程的語言它本身并沒有像 C 或 Java 那樣原生支持 class類的關鍵字和面向對象機制。不過C語言提供了非常強大的結構體struct。在實際開發中程序員通常會利用 struct 配合函數指針來“模擬”出類的核心特性封裝、多態等。以下是 C語言中“模擬類”的核心方式1. 用 struct 模擬“屬性”與“方法”在 C 中類的成員變量和成員函數是一體的。而在 C 語言中通常將數據放在 struct 中將操作這些數據的函數寫在外部并將 struct 的指針作為參數傳遞給函數模擬 this 指針。#include // 1. 定義“類”的屬性結構體 typedef struct { char *name; int age; } Person; // 2. 定義“方法”普通函數傳入結構體指針模擬 this void person_say_hello(Person *this) { printf(Hello, my name is %s, I am %d years old.\n, this-name, this-age); } // 3. 模擬“構造器” Person create_person(const char *name, int age) { Person p; p.name (char *)name; p.age age; return p; } int main() { // 4. 實例化“對象”并調用“方法” Person p1 create_person(Alice, 25); person_say_hello(p1); return 0; }2. 用“函數指針”模擬“多態”如果想在 C 語言中實現類似類的“多態”不同對象調用同名方法產生不同行為可以在 struct 中嵌入函數指針typedef struct { void (*speak)(void); // 函數指針相當于虛函數 } Animal; void dog_speak() { printf(Woof!\n); } void cat_speak() { printf(Meow!\n); } int main() { Animal dog { dog_speak }; Animal cat { cat_speak }; dog.speak(); // 輸出: Woof! cat.speak(); // 輸出: Meow! return 0; }3. C語言與 C 類的核心區別雖然 C 語言可以“模擬”類但它缺乏面向對象語言的底層支持總結在 C 語言中你無法直接寫 class但可以通過 struct 函數指針 這套組合拳實現高度類似類的面向對象編程。Linux 內核中大量的面向對象設計如 VFS 虛擬文件系統就是基于這種 C 語言技巧實現的。