diff options
| author | yingyu5658 <i@yingyu5658.me> | 2025-12-13 08:33:08 +0800 |
|---|---|---|
| committer | yingyu5658 <i@yingyu5658.me> | 2025-12-13 08:33:08 +0800 |
| commit | 1e5f8eb33bc41cb59faf059e83701152785cabea (patch) | |
| tree | 45867273ac2178285be840764f7962d2b55556c6 /content/posts/C语言的头文件与OOP范式的抽象类、接口的异同点.md | |
| download | blog-1e5f8eb33bc41cb59faf059e83701152785cabea.tar.gz blog-1e5f8eb33bc41cb59faf059e83701152785cabea.zip | |
Initial commit
Diffstat (limited to 'content/posts/C语言的头文件与OOP范式的抽象类、接口的异同点.md')
| -rw-r--r-- | content/posts/C语言的头文件与OOP范式的抽象类、接口的异同点.md | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/content/posts/C语言的头文件与OOP范式的抽象类、接口的异同点.md b/content/posts/C语言的头文件与OOP范式的抽象类、接口的异同点.md new file mode 100644 index 0000000..f0c212b --- /dev/null +++ b/content/posts/C语言的头文件与OOP范式的抽象类、接口的异同点.md @@ -0,0 +1,46 @@ +--- +abbrlink: 3508058237 +categories: +- 往昔 +date: "2025-06-06 20:16:56" +tags: +- C语言 +title: C语言的头文件与OOP范式的抽象类、接口的异同点 +--- +## 引言 + +说真的,从去年十一月份开始接触编程,到现在也好几个月了,自认为进步速度较快,但速度快也就导致了深度浅,走马观花式的学习,现在还是有很多理解不深刻的点,今天来仔细研究一下这个问题。我也是先入为主,第一门编程语言学的是Java,所以再接触C,一些概念就混淆了。 + +## C语言模块化设计的核心 + +头文件本质是对外提供的接口**契约**,包含函数声明、宏定义、结构体类型声明。例如: +```c +// math_utils.h +#ifndef MATH_UTILS_H +#define MATH_UTILS_H +int add(int a, int b); // 函数声明 +#endif +``` + +- 编译隔离:通过头文件守卫(#ifndef)实现模块之间的编译隔离。 +- 虽然头文件可以实现函数,但这会破坏模块化。 + +### 模块化实现规范 + +- 源文件承载具体实现,通过包含对应头文件实现联系 +- 模块间通过`extern`关键字声明共享全局变量(谨慎使用) + +## 面向对象中的抽象机制 + +抽象类可以包含部分实现,它的目的是:**描述一个公共基类,有共同的特征,有部分方法实现,但另一部分依赖子类自行实现**。 + +接口是一系列方法的声明,一个接口就是在描述一种能力。 + +设计目标上,抽象类为了代码复用+多台,而接口是行为契约。 + +## 设计范式对比 + +### C模块化 vs OOP抽象 + +- 抽象粒度:C模块关注功能单元(做什么),而OOP抽象关注对象行为契约(是谁做什么) +- 扩展方式:C通过函数指针传递上下文,OOP通过继承、实现扩展。 |
