为什么C ++同时具有类和结构?

时间:2011-04-20 20:43:33

标签: c++ class struct

  

可能重复:
  What are the differences between struct and class in C++

如果结构和类之间的唯一区别是默认访问说明符(在C ++中),那么为什么C ++也有类?

4 个答案:

答案 0 :(得分:12)

首先,它与C的向后兼容性 其次(更重要的是),它有助于描述您的意图。标准惯例是POD应该用struct表示,数据和行为的集合应该用class表示。

答案 1 :(得分:0)

您希望类在设计面向对象的层次结构时将默认访问说明符设置为私有,但结构需要将默认访问说明符设置为公共,以保持与C的兼容性。

答案 2 :(得分:0)

正如其他人发布的那样,主要区别在于默认保护级别(即公共或私有)。但是,它也是数据结构实际使用的一个很好的指示。例如,有时您可能需要轻量级结构,类似于java bean。在这种情况下,你可能只有:

struct point {
   float x, y;
};

很明显,你没有在这里使用任何C ++功能,而不是:

class point {
public:
   float x, y;
};

目的还不清楚。我可能会注意到第二个例子是错误的代码,因为有人没有提供getter和setter。

答案 3 :(得分:-1)

向后兼容C. C没有类,但它有结构。

请注意,这只是.c文件文本中的“向后兼容性”。在C ++中,结构体实际上是类,默认曝光为public,而不是private的默认曝光。

class Bob {
   // I haven't overridden the exposure, so it's private
   int age;
   int height;

   public:
     Bob();

};


struct Bob {
   // I haven't overridden the exposure, so it's public
   int age;
   int height;

   // note the constructor defaults to the "default" constructor.
};

真正的C样式结构定义如此

extern "C" {
  struct Bob {
     int age;
     int height;
  };
}

在这种情况下,age变为“offset +0”的别名,而height变为“offset +(sizeof(int)+对齐到内存管理器边界”)的别名,而不是可以实现的概念字段以任何所需的方式。