聚合類

baobaobashi發表於2024-05-24

在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),它允許使用花括號{}來初始化任何型別的物件,包括那些具有使用者定義的建構函式的物件。
因此,即使一個類不是聚合類,也可以使用花括號進行初始化。但是,聚合初始化的概念仍然適用於那些滿足聚合類條件的類。

相關文章