轉載自 這裡
前言 :
熟悉C的程序員應該都知道 union 的用法,利用union可以用相同的存儲空間存儲不同型別的數據類型,從而節省內存空間。 當訪問其內成員時可用"."和"->"來直接訪問。 在C++出現後,它繼承了union並保留了其在C中的特性。
Union 結構體介紹 :
union是一種特殊的類別,使用關鍵字union來定義,union維護足夠的空間來置放多個資料成員中的「一種」,而不是為每一個資料成員配置空間, 在union中所有的資料成員共用一個空間,同時間只能儲存其中一個成員的資料,一個定義union的例子如下 :
一個union只配置一個足夠大的空間以來容納最大長度的資料成員,以上例而言,最大長度是double型態,所以StateMachine的記憶體空間 就是double型態的長度,union的成員預設為public,也可以宣告為protected或private,當中可以定義建構函式、解構函式與 成員函式,例如 :
由於union的資料成員共用一個記憶體空間,所以必須存取正確的資料成員才能正確的取出資料,可以使用一個額外的變數或列舉型態來記錄最後一次使用空間 的是哪個資料成員,例如 :
另外要注意的是,union的成員不可以為靜態、參考,如果是自訂型態的話,該自訂型態成員不可以有建構函式、解構函式或是複製指定運算子.
補充說明 :
* C++中union的應用剖析
* [C++ 小學堂] 結構, 共用體與鏈表 : 共用體
前言 :
熟悉C的程序員應該都知道 union 的用法,利用union可以用相同的存儲空間存儲不同型別的數據類型,從而節省內存空間。 當訪問其內成員時可用"."和"->"來直接訪問。 在C++出現後,它繼承了union並保留了其在C中的特性。
Union 結構體介紹 :
union是一種特殊的類別,使用關鍵字union來定義,union維護足夠的空間來置放多個資料成員中的「一種」,而不是為每一個資料成員配置空間, 在union中所有的資料成員共用一個空間,同時間只能儲存其中一個成員的資料,一個定義union的例子如下 :
- union StateMachine {
- char character;
- int number;
- char *str;
- double exp;
- };
由於union的資料成員共用一個記憶體空間,所以必須存取正確的資料成員才能正確的取出資料,可以使用一個額外的變數或列舉型態來記錄最後一次使用空間 的是哪個資料成員,例如 :
另外要注意的是,union的成員不可以為靜態、參考,如果是自訂型態的話,該自訂型態成員不可以有建構函式、解構函式或是複製指定運算子.
補充說明 :
* C++中union的應用剖析
* [C++ 小學堂] 結構, 共用體與鏈表 : 共用體
This message was edited 6 times. Last update was at 04/08/2010 17:02:52
沒有留言:
張貼留言