結構體是一個由程式設計師定義的資料型別,可以容納許多不同的資料值。在過去,物件導向程式設計的應用尚未普及之前,程式設計師通常使用這些從邏輯上連線在一起的資料組合到一個單元中。一旦結構體型別被宣告並且其資料成員被標識,即可建立該型別的多個變數,就像可以為同一個類建立多個物件一樣。
雖然今天結構體較少使用,但知道它們是什麼,以及如何使用它們仍然很重要,這並不僅僅是因為可以在較老的程式中遇到它們,還因為在某些情況下,類的範例無法使用,這時必須使用結構體。
宣告結構體的方式和宣告類的方式大致相同,其區別如下:
-
使用關鍵字 struct 而不是關鍵字 class。
-
儘管結構體可以包含成員函數,但它們很少這樣做。所以,通常情況下結構體宣告只會宣告成員變數。
-
結構體宣告通常不包括 public 或 private 的存取修飾符。
-
類成員預設情況是私有的,而結構體的成員則預設為 public。程式設計師通常希望它們保持公開,只需使用預設值即可。
以下是一個結構體宣告的範例,該結構體將 5 個變數系結在一起,儲存了員工的工資單資料。這個特殊結構體的名稱是 PayRoll。請注意,它以大寫字母開頭,這和類名使用大寫字母開頭的約定一樣。另外還要注意,與類宣告一樣,在結構體宣告的大括號後面必須有一個分號。
struct PayRoll
{
int empNumber;
string name;
double hours,payRate,grossPay;
};
正如在類的物件被建立之前,類宣告不會被範例化一樣,結構體宣告不會建立任何結構體的範例。本範例中的結構體宣告只是告訴編譯器PayRoll結構體看起來的樣子。它本質上是建立一個名為 PayRoll 的新資料型別。
定義 PayRoll 結構體的變數和定義其他任何變數的方式並無二致,首先列出資料型別,然後是變數名稱。以下定義語句建立了 PayRoll 結構體的 3 個變數:
PayRoll deptHead, foreman, associate;
它們每一個都是 PayRoll 結構體的範例,可以被分配和擁有自己的記憶體,以儲存其成員資料。請注意,儘管 3 個結構體變數具有不同的名稱,但每個變數都包含具有相同名稱的成員,如圖 1 所示。
圖 1 每個結構體變數都包含具有相同名稱的成員