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

Why does C++ have both classes and structs?

本文关键字:结构 C++ 为什么      更新时间:2023-10-16

可能重复:
C++中的结构和类之间有什么区别

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

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

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

与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风格结构被定义为so

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

在这种情况下,age更像是"offset+0"的别名,height更像是一个"offset+(sizeof(int(+与内存管理器边界对齐(的别名,而不是可以以任何所需方式实现的概念字段。

正如其他人所说,主要区别在于默认的保护级别(即公共或私有(。然而,它也很好地表明了数据结构的实际使用情况。例如,有时您可能想要一个类似于javabean的轻量级结构。在这种情况下,你可能只有:

struct point {
   float x, y;
};

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

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

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