在C++中,聚合類(Aggregate Class)或聚合(Aggregate)是一個特殊的類,它滿足以下條件:
- 所有成員都是public的(雖然這並非嚴格要求,但如果是private或protected,則無法直接訪問它們進行聚合初始化)。
- 初始值的順序必須與宣告一致
- 沒有使用者定義的建構函式、複製建構函式、移動建構函式、解構函式、複製賦值運算子或移動賦值運算子。
- 沒有基類(即沒有繼承)。
- 沒有虛擬函式(包括解構函式)。
- 聚合類允許使用花括號{}進行初始化,而不需要使用建構函式。這種初始化方式被稱為聚合初始化(Aggregate Initialization)。
下面是一個聚合類的例子:
struct Aggregate
{
int x;
float y;
// 注意這裡沒有定義任何建構函式或解構函式
};
int main()
{
Aggregate a = {10, 20.5f}; // 使用聚合初始化
Aggregate b = {20.5f, 10}; //錯誤:順序不一致
return 0;
}
在這個例子中,Aggregate結構體就是一個聚合類。我們可以在宣告時直接初始化其成員,而不需要提供建構函式。
然而,從C++11開始,引入了新的特性,如列表初始化(List Initialization),它允許使用花括號{}來初始化任何型別的物件,包括那些具有使用者定義的建構函式的物件。
因此,即使一個類不是聚合類,也可以使用花括號進行初始化。但是,聚合初始化的概念仍然適用於那些滿足聚合類條件的類。