聚合類使得用戶可以直接訪問成員,並且具有特殊的初始化語法形式。當一個類滿足如下條件時,我們說它是聚合的:
·所有成員都是public的。
·沒有定義任何構造函數。
·沒有類內初始值。
·沒有基類,也沒有virtual函數。
例如,下面的類是一個聚合類:
struct Data{
int ival;
string s;
};
我們可以提供一個花括號括起來的成員初始值列表,並用它初始化聚合類的數據成員:
//val1.ival=0;val1.s=string("Anna")
Data val1={0,"Anna"};
初始值的順序必須與聲明的順序一致,也就是說,第一個成員的初始值要放在第一個,然后是第二個,以此類推。下面的例子是錯誤的:
//錯誤:不能使用"Anna"初始化val1,也不能使用1024初始化s
Data val2={"Anna",1024};
與初始化數組元素的規則一樣,如果初始值列表中的元素個數少於類的成員數量,則靠后的成員被值初始化。初始值列表的元素個數絕對不能超過類的成員數量。
值得注意的是,顯式地初始化類的對象的成員存在三個明顯的缺點:
·要求類的所有成員都是public的。
·將正確初始化每個對象的每個成員的重任交給了類的用戶(而非類的作者)。因為用戶很容易忘掉某個初始值,或者提供一個不恰當的初始值,所以這樣的初始化過程冗長乏味且容易出錯。
·添加或刪除一個成員之后,所有的初始化語句都需要更新。