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 语言技巧实现的。

相关新闻

最新新闻

零基础入门python21:Flask账本的数据模型——用户、分类和账目

零基础入门python21:Flask账本的数据模型——用户、分类和账目

零基础入门python21:Flask账本的数据模型——用户、分类和账目一、上一篇课后练习讲解 上一篇要求使用环境变量并验证测试配置。参考测试通过 create_app({TESTING: True, SQLALCHEMY_DATABASE_URI: sqlite:///:memory:}) 创建临时应用,再在应用上下文中…

2026/8/25 13:04:39
Agent Router 一个免费用codex,claude的网站如何接入 CC Switch

Agent Router 一个免费用codex,claude的网站如何接入 CC Switch

先登录 Agent Router 打开 Agent Router,按页面提供的方式完成登录。登录后进入控制台,左侧通常可以看到数据看板、API 令牌、使用日志、钱包和个人设置等入口 创建 API Key 进入左侧的“API 令牌”,点击“添加令牌”。名称取一个自己能认出…

2026/8/25 13:04:39
电商美工PS培训零基础怎么学 ?学设计就业推荐橡果教育

电商美工PS培训零基础怎么学 ?学设计就业推荐橡果教育

电商美工PS培训零基础怎么学 ?学设计就业推荐橡果教育 当下电商行业持续火爆,淘宝、拼多多、京东、抖音、小红书、跨境电商等平台商家数量逐年递增,市场对电商美工的需求始终处于紧缺状态。不管是品牌旗舰店、直播带货团队,还是中…

2026/8/25 13:04:39
蓝速科技丨新旧楼宇混杂场景下会议室预约门牌屏一体化改造方案

蓝速科技丨新旧楼宇混杂场景下会议室预约门牌屏一体化改造方案

在很多大型园区或企业总部的智能化升级项目中,最让人头疼的往往不是技术本身,而是建筑环境的复杂性。想象一下这样的场景:一边是刚刚落成、管线布局完美的新建写字楼,另一边则是墙体厚重、装修定型且严禁大规模破拆的老办公楼。当…

2026/8/25 13:04:39
Power BI做了RLS,AI问数会不会越权?

Power BI做了RLS,AI问数会不会越权?

先说结论 Power BI做了RLS,不代表AI问数天然不会越权 这两句话听起来很接近,实际差别很大。 假设一家企业按区域设置了行级安全(RLS): 华南经理只能看华南 华东经理只能看华东 总经理可以看全国 在Power BI报表里&…

2026/8/25 13:04:39
K8s Etcd 备份恢复|为什么恢复集群不停业务 Pod?

K8s Etcd 备份恢复|为什么恢复集群不停业务 Pod?

K8s Etcd 备份恢复超详细解析|为什么恢复集群不停业务 Pod?前言Etcd 是 K8s 的数据库,所有集群资源存在这里。很多人搞不懂: 恢复 etcd 要停 apiserver、停 etcd,为什么正在运行的业务 Pod 不会挂?1、两条完…

2026/8/25 12:59:39