【发布时间】:2018-07-27 19:00:48
【问题描述】:
例如,如果我需要获取目录中的文件,
封装:
struct dirent *ent;
ent = readdir (dir);
char *filename = d_name(ent);
C:
struct dirent *ent;
ent = readdir (dir);
char *filename = ent->d_name;
【问题讨论】:
-
没有理由你不能拥有一个返回文件名的函数
d_name。 -
结构字段可以直接访问,所以人们会这样做。但是您可以创建一个宏(使用其他名称)或一个函数来执行该封装。
-
另外,
ent数据可能是内部状态的副本,所以它已经封装在一个结构中 -
为什么早于 OOP 概念的 C API 会遵循其原则?
-
使用 getter 而不是直接访问字段并不会自动暗示封装。