c++ - 如何在c中实现一个类

标签 c++ c

<分区>

Possible Duplicate:
How do you implement a class in C?

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

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

C 编译器是否也支持访问说明符 private、public 和 protected inside 结构?

最佳答案

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

也没有private:

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

void func1( struct A* );

void fun( struct A* );

但一切都是公开的。

为了使事情更加封装,您将隐藏结构 A 的实际实现细节并仅显示带有公共(public)方法的前向声明。

protected 没有任何实际意义,因为没有继承。您可以通过将您的详细信息或其功能暴露给某些内部模块来实现“友元”,但友元与 protected 不同,后者在 C 中根本不存在。

在您的类(class)中,您已将其中两个成员公开,但如果我们“隐藏”结构 A,我们将隐藏所有内容,因此请改为提供 getter 和 setter。

或者我们可以“隐藏”我们结构的一部分,比如: 结构 A1;

struct A
{
   struct A1 * privatePart;
   int b, c;  // public part     
};

虽然它变得“困惑”,因为您必须开始分配私有(private)部分(请记住,在 C 中没有智能指针或析构函数,因此您必须更加小心内存管理)。

很多 C API 为此使用的是一种命名约定,它们将“私有(private)”变量称为“保留”,通常是 reserved1、reserved2 等。编译器不会阻止您写入它们,但您显然会这样做您自己的风险,并且意图很明确,您不应该访问这些成员(直接复制或类似的除外)。

关于c++ - 如何在c中实现一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032015/

相关文章:

c++ - 在不考虑模板参数的情况下比较模板化类型

c++ - 在类构造函数中设置 std::vector

c++ -::func has not been declared 错误

C++通过套接字发送包含\0的文件而不会意外关闭

c++ - 当函数可能没有要返回的值时,返回类型应该是什么?

c - 你如何在cuda中创建一个二维数组

c - 书错? (头先 C)

c - 在 fprintf 中传递参数的问题

python - 如何在 Linux 中创建不应在 ps -ef 命令中列出的进程

c - 使用 sscanf 多次读取字符串