当前位置: 首页 > news >正文

如何在纯C中实现类、继承和多态(小白友好版)

基本实现原理

/* 通过结构体+函数指针模拟类 */
typedef struct {// 成员变量int x;  // 成员方法(函数指针)                  void (*print)(void* self);  
} MyClass;/* 成员函数实现 */
void my_print(void* self) {MyClass* obj = (MyClass*)self;printf("Value: %d\n", obj->x);
}/* 构造函数 */
MyClass* MyClass_create(int x) {MyClass* obj = malloc(sizeof(MyClass));obj->x = x;obj->print = my_print;  // 方法绑定return obj;
}

🔀 三种核心特性实现

1. 封装

// 头文件(.h)中只声明结构体指针
typedef struct HiddenClass HiddenClass;// 源文件(.c)中定义真实结构体
struct HiddenClass {int private_data;void (*public_method)(HiddenClass*);
};

2. 继承

/* 基类 */
typedef struct {int base_val;void (*base_method)();
} Base;/* 派生类 */
typedef struct {Base super;  // 包含基类实现继承int derived_val;
} Derived;

3. 多态

typedef struct {void (*speak)();
} Animal;void dog_speak() { printf("汪汪汪\n"); }
void cat_speak() { printf("喵喵喵\n"); }Animal dog = { .speak = dog_speak };
Animal cat = { .speak = cat_speak };

🧩 完整示例:图形系统

/* 基类:Shape */
typedef struct Shape Shape;
struct Shape {void (*draw)(Shape*);
};/* 派生类:Circle */
typedef struct {Shape parent;  // 继承int radius;
} Circle;void circle_draw(Shape* self) {Circle* c = (Circle*)self;printf("绘制半径%d的圆\n", c->radius);
}Circle* create_circle(int r) {Circle* c = malloc(sizeof(Circle));c->parent.draw = circle_draw;c->radius = r;return c;
}

备注

个人水平有限,有问题随时交流~

http://www.xdnf.cn/news/260443.html

相关文章:

  • 测试——用例篇
  • 计算机启动流程中,都干了啥事。比如文件挂在,操作系统加载,中断向量表加载,磁盘初始化在哪阶段。
  • 动态思维——AI与思维模型【91】
  • python入门(1)变量与输入输出
  • 传奇各职业/战士/法师/道士/项链爆率及出处产出地/圣战/法神/天尊/魔血/祈福/探测/技巧/虹魔/祈祷
  • 在网鱼网吧测试文件试验成功
  • 第 8 篇:B/B+ 树:为海量磁盘数据而生
  • 腾讯云服务器:bgp服务器搭建要怎么做?bgp服务器的应用有哪些?
  • 第 3 篇:有序的世界:有序表 (TreeMap/TreeSet) 的概念与优势
  • 【大模型面试每日一题】Day 6:分布式训练中 loss 出现 NaN,可能原因及排查方法?
  • whl文件名后缀
  • 【Shell编程】条件表达式中[]和[[]]的区别
  • 截图软件、画图软件、左右分屏插件、快捷键
  • 小刚说C语言刷题—1018三角形类别
  • 快速将FastAPI接口转为模型上下文协议(MCP)!
  • Visionatrix开源程序可以简化您的 AI 图像生成工作流程 - Visionatrix 是一个基于 ComfyUI 构建的直观界面
  • Linux系统中升级GCC和G++工具版本至14.2.0
  • 二项分布习题集 · 答案与解析篇
  • 【愚公系列】《Manus极简入门》013-电影推荐专家:“银幕导航家”
  • 一、Shell 脚本基础
  • 2025最新AI绘画系统源码 - 画图大模型/GPT-4全支持/AI换脸/自定义智能体
  • PointPillars(一),跑通OpenPCDet中的demo
  • 解决C4D中ProRender渲染黑屏
  • 浅谈SpringBoot框架中的单例bean
  • Python虚假新闻检测识别
  • 订单系统冷热分离方案:优化性能与降低存储成本
  • AI人工智能的接入和使用
  • 第37课 绘制原理图——放置离页连接符
  • C语言 之 【栈的简介、栈的实现(初始化、销毁、入栈、出栈、判空、栈的大小、访问栈顶元素、打印)】
  • 从数据到故事:用可视化工具讲好商业“话本“