|
union是一種特殊的類別,使用關鍵字union來定義,union維護足夠的空間來置放多個資料成員中的「一種」,而不是為每一個資料成員配置空間,
在union中所有的資料成員共用一個空間,同時間只能儲存其中一個成員的資料,一個定義union的例子如下: union
StateMachine {
char character; int number; char *str; double exp; }; 一個union只配置一個足夠大的空間以來容納最大長度的資料成員,以上例而言,最大長度是double型態,所以StateMachine的記憶體空間 就是double型態的長度,union的成員預設為public,也可以宣告為protected或private,當中可以定義建構函式、解構函式與 成員函式,例如: #include <iostream> 執行結果:
由於union的資料成員共用一個記憶體空間,所以必須存取正確的資料成員才能正確的取出資料,可以使用一個額外的變數或列舉型態來記錄最後一次使用空間 的是哪個資料成員,例如: #include
<iostream>
using namespace std; union StateMachine { public: char character; int number; char *str; StateMachine(char c) { character = c; } StateMachine(int n) { number = n; } StateMachine(char* s) { str = s; } }; enum State {character, number, str}; int main() { State state = character; StateMachine machine('J'); ... if(state == character) cout << machine.character << endl; ... return 0; } 另外要注意的是,union的成員不可以為靜態、參考,如果是自訂型態的話,該自訂型態成員不可以有建構函式、解構函式或是複製指定運算子。 |