如何在c中实现一个类

inf*_*ect 0 c c++

可能重复:
如何在C中实现一个类?

在我的测试中,我被告知我需要找到一种方法来在C中实现以下类

class A
{
    private:
      int a,b;
    public:
      void func1();
      int c,d;
    protected:
      int e,f;
      void fun();
};
Run Code Online (Sandbox Code Playgroud)

C编译器是否也支持访问说明符私有,公共和受保护的内部结构?

Cas*_*Cow 8

C中没有类,只有结构.C++中有类.

也没有private:

struct A
{
   int a, b;
   int c, d;
   int e, f;
};

void func1( struct A* );

void fun( struct A* );
Run Code Online (Sandbox Code Playgroud)

但一切都是公开的.

为了使事物更加封装,您将隐藏struct A的实际实现细节,并仅使用public方法显示前向声明.

protected因为没有继承,所以没有任何意义.您可以通过将您的详细信息或其功能暴露给某些内部模块来实现"友谊",但友谊与受保护的不同,这在C中根本不存在.

在你的课堂上你已经公开了两个成员,但如果我们"隐藏"结构A我们隐藏了所有内容,所以提供getter和setter.

或者,我们可以"隐藏"我们结构的一部分,例如:struct A1;

struct A
{
   struct A1 * privatePart;
   int b, c;  // public part     
};
Run Code Online (Sandbox Code Playgroud)

虽然它必须开始分配私有部分会变得"混乱"(并且在C中记住没有智能指针或析构函数,所以你必须对内存管理更加小心).

许多C API使用的是一个命名约定,它将"私有"变量称为"保留",通常是reserved1,reserved2等.编译器不会阻止你写入它们,但你显然这样做需要你自担风险,并且明确表示您不应该访问这些成员(直接复制或类似的除外).