C语言的类模拟实现

📅 2026/8/25 12:29:14
C语言的类模拟实现
严格来说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 语言技巧实现的。