今天我們來講共同空間~
共同空間 (union)型態也稱為聯合或者是同位,它和結構的使用方式類似,都可以使用不同型熊的資料,而共同空間則是利用一塊共用的空間來存放資料。舉例來說,在日常生活中我們常會填寫一些表格,如果直接將這些表格以電腦化的方式輸入,有些欄位就會遇到不用填或是要填其它內容的情況,此時共同空間就可以發揮它的功用。
共同空間的定義及宣告方式與結構相同,其格式如下:
union 共同空間型態
{
資料型態 欄位型態1;
資料型態 欄位型態2;
...
資料型態 欄位型態n;
};
union 共同空間型態 變數1, 變數2,...,變數m;
共同空間的定義以關鍵字unoin為首,union後面所接續的識別字,即為自訂的共同空間型態名稱;而左、右大括號所包圍起來的內容,就是共同空間裡面的各個欄位,由於每個欄位的型態可能不同,所以各欄位就如同一般的變數宣告方式一樣,要定義其所屬型態。除了前面所使用的宣告格式外,也可以使用下列的格式來共同空間:
union 共同空間型態
{
資料型態 欄位名稱1;
資料型態 欄位型態2;
...
資料型態 欄位名稱n;
} 變數1,變數2,...,變數m;
如果想在定義結構內容之後直接宣告該結構的變數,就可以使用第二個定義格式,這兩種定義及宣告格式的效果是相同的。
雖然共同空間變數內部定義許多,但是這些資料型態卻不是同時存在的,使用時他們只能有一個欄位存在於共同空間變數,也就是說,若是使用欄位A,就無法再使用其他的欄位,如果使用者執意要存放資料,就會造成資料被覆蓋的情況。下面的程式是以性別決定輸入的資料,我們以共同空間為例說明:
//prog11_8,共同空間的使用
#include <iostream>
#include <cstdlib>
using namespace std;
union mydata{ //定義共同空間
char grade;
int score;
}student; //宣告共同空間變數
int main(void){
char sex;
do{
cout << "Your sex is (1)male (2)female:"; //輸入性別
cin.get(sex);
cin.get(); //清除換行符號,避免影響後續輸入
}
while((sex>'2')||(sex<'1')); // 如果使用者輸入的值不是 '1' 或 '2',則重新要求輸入
if(sex=='1'){
cout << "Input score:";
cin >> student.score;
}
else{
cout << "Input grade:";
cin.get(student.grade);
}
}
程式中定義mydata型態的共同空間,包括等級與分數二個欄位,同時宣告該型態之共同空間變數student。由於grade與score只會有一個存在,所以考以定義成共同空間型態,如此一來可以節省不必要的記憶體空間。
今天先到這邊~謝謝大家!