c - ANSI C 中的模拟类

标签 c struct oop

要使结构的成员对外部“私有(private)”,我知道我可以做到这一点。

在.h文件中

typedef struct Obj Obj;

然后在 .c 文件中

struct Obj {
int a;
int b;
}

这将使 ab 的存在不被知晓。但是 .c 文件中的所有“成员”函数现在都将与它们相关,并且可以在那时进行操作。 但我现在想知道的是,是否可以将结构的一部分设为“私有(private)”。假设我想将这些 ab 变量保留为“私有(private)”,但随后我想要一些函数指针保持公开状态。这可能吗? 我知道,如果我尝试在 .h 文件的结构中声明这些,我会在结构上收到重复声明错误。

最佳答案

复制Python:对“私有(private)”成员使用荣誉系统。

在成员名称的开头放置一个 _ 作为其他代码不应触及的危险信号。除非您的应用程序内部有安全边界(这并不常见),否则您实际上不需要真正的私有(private),您只需要团队成员同意的约定来假装他们是私有(private)的。

尽量不要通过强制 C 进入一个它并不真正适合的范式来增加复杂性。用于公共(public)/私有(private)接口(interface)的额外 header 和用于类管理的额外源文件将使您的开发工作变得更加复杂,从而违背了信息隐藏所追求的“更易于维护”的目标。

关于c - ANSI C 中的模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3317195/

相关文章:

c# - 在 C# 中,override 修饰符在派生类中对于基类的虚拟/抽象方法是强制性的

c++ - 具有指向派生对象 : How to tell both of each other's existence? 的指针的基类

核心转储 GDB "Backtrace stopped: frame did not save the PC"

c - C 语言中的哈希数组技巧

c++ - std::unordered_map 作为结构成员具有地址 0

在 Visual C++ 中克隆具有不同对齐方式的现有结构

oop - 如何从方法传递消息和数据

c - 如何获取C语言执行shell命令的响应结果?

c - 将 vector 传递给函数以计算 C 中的长度

c++ - 无法将结构数组传递给函数