ANSI C中的模拟类

时间:2010-07-23 10:10:49

标签: c struct oop

为了让结构的成员对外“私密”,我知道我可以做到这一点。

在.h文件中

typedef struct Obj Obj;

然后在.c文件中

struct Obj {
int a;
int b;
}

这将使ab的存在知识得以保存。但是.c文件中的所有“成员”函数现在都将关于它们,并且可以随后进行操作。 但我现在想知道的是,如果你可以使结构的PART“私有”。假设我想将那些ab变量保持为“私有”,但我希望有一些我希望保持公开的函数指针。这可能吗? 我知道如果我尝试在.h文件中的结构中声明这些,我会在结构上得到重复的声明错误。

2 个答案:

答案 0 :(得分:2)

这个(未测试甚至编译)可以为你工作吗?

在文件“everybody_includes_me.h”中:

typedef public_struct {
  func1_ptr;
  func2_ptr;
} PUBLIC_STRUCT;

extern PUBLIC_STRUCT func_pointers;

并在文件“totally_public.c”中:

PUBLIC_STRUCT func_pointers;

then in the file "all_private.c":

struct Obj {
  PUBLIC_STRUCT *func_pointers;
  int a;
  int b;
}

答案 1 :(得分:2)

复制Python:将荣誉系统用于“私人”成员。

_放在成员名称的开头作为红色标记,其他代码不应该触及它。除非你的应用程序内部有安全边界(这种情况并不常见),否则你实际上并不需要真正的私有,你只需要团队成员同意的约定假装他们是私有的。

尽量不要通过强制C进入一个它并不真正适合的范例来增加复杂性。用于公共/私有接口的额外标头和用于类管理的额外源文件将使您的开发工作变得更加复杂,从而破坏了信息隐藏目标的“更可维护”目标。