Menu
CoddyTech

不透明指针的概念

本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 17 课,共 61 课。

到目前为止,我们在头文件中定义结构体时,任何包含该头文件的人都能看到并直接访问它的所有成员。这破坏了封装性:也就是对外部代码隐藏内部细节的原则。

C 提供了一种称为不透明指针的强大技术来解决这个问题。思路很简单:在头文件中声明一个结构体存在,但不透露它的内部内容。这通过使用不完整类型来实现:

// wallet.h
typedef struct Wallet Wallet;  // 只有声明,没有结构体定义!

Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);

注意,这里没有花括号。我们从未定义 Wallet 包含什么。编译器知道这种类型存在,但不知道它的大小或成员。这意味着包含此头文件的代码只能使用指向 Wallet 的指针,不能直接使用结构体本身。

这为什么重要?因为实际的结构体定义隐藏在 .c 文件中,任何使用你的头文件的代码都无法写 w->balance 或 sizeof(Wallet)。它们必须使用你提供的函数。你可以控制对数据的所有访问,而且以后可以更改内部结构,而不会破坏任何依赖你的头文件的代码。

在下一课中,你将练习在源文件中定义实际的结构体主体,完成不透明指针模式。

亲手试试

这节课没有代码挑战。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C 在线编译器