c++ - 什么是聚合类?

标签 c++

我刚刚在第 298 页的 C++ Primer(第 5 版)中阅读了以下定义:

A class is an aggregate if:

  • All of its data members are public

  • It does not define any constructors

  • It has no in-class initializers

  • It has no base classes or virtual functions

此帖子中还提供了一个定义:What are Aggregates and PODs and how/why are they special? .

在阅读了本书前几节关于封装值(value)的所有内容后,我想知道:为什么会有人想要使用聚合类? (顺便说一句,这个问题似乎一般适用于 struct:为什么我要默认使用 public:?)

最佳答案

聚合基本上是一个简单的数据集合,没有任何 class 必须保证的不变量。由于没有不变性,因此成员的所有可能值的组合都是有意义的,因此将它们设为私有(private)是没有意义的,因为没有什么需要保护的。

这样一个类的简单例子是

struct Point3d {
   std::array<double, 3> coordinates;
};

由于 double 的每个三元组都是 R^3 中的一个点,因此隐藏数据没有任何好处。 (如果您害怕 NaNinfinity 值,这可能不是最好的主意。如果可能发生这种情况,您可能不想将其设为聚合。)

聚合类型的另一个示例是 std::array .同样,它只是某种类型和某种(不可变)长度的数组,因此没有要保护的不变量。

聚合的一个优势是 aggregate initialization .

关于c++ - 什么是聚合类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232288/

相关文章:

c++ - 在 C/C++ 中读取图像文件

c++ - C++ 对象的生命周期是什么?

javascript - 如何将数据传递到 BB10 级联中的 javascript 文件。?

html - 如何在不获取所有 html 的情况下获取 TextEdit html 标签?

c++ - 尝试在结构中接收模板并将其用于 std::vector

c++ - 顶点不渲染 - DirectX

c++ - 防止实例化未使用的默认函数参数

c++ - C++ 中枚举的获取和设置

c++ - 链接两个 QListWidget

c++ - ImageList_LoadImage 找不到位图