5.2.4 共用体使用举例

    为了方便管理,某学校决定为学生和老师制作统一的卡片,其中有一项内容是所在单位,对学生来说,代表其所在年级(int型),但对老师来说,代表学校某个部门(字符数组),这样的数据应如何组织呢?使用数组不行,因为数组中必须存储同类型的数据,使用结构也不行,因为年级和部门只能取其一,两者之间不是并列的关系,对这个问题来说,最好的解决办法是使用共用体,来看一段示例代码。

    代码5.5 共用体使用举例UnionSample


    <——————————-文件名:example505.cpp————————————————-> 01 #include<iostream> 02 union info//定义共用体info 03 { 04 int grade;//年级,面向学生 05 char department[20];//部门,面向老师 06 }; 07 int main() 08 { 09 using namespace std; 10 info personInfo;//声明共用体变量personInfo 11 int ans=-1; 12 cout<<"老师还是学生?(输入0代表学生,1代表老师):"<<endl; 13 cin>>ans; 14 //同一时刻,grade和department中只能有一个被写入 15 if(ans==0) 16 { 17 cout<<"欢迎你,请输入你所在的年级:"<<endl; 18 cin>>personInfo. grade; 19 cout<<"你的年级是:"<<personInfo.grade<<endl; 20 } 21 if(ans==1) 22 { 23 cout<<"欢迎你,请输入你所在的部门:"<<endl; 24 cin>>personInfo. department; 25 cout<<"你的部门名是:"<<personInfo.department<<endl; 26 } 27 return 0; 28 }

    输出结果如下所示。


    老师还是学生?(输入0代表学生,1代表老师): 0(注:键盘输入) 欢迎你,请输入你所在的年级: 4(注:键盘输入) 你的年级是:4或者: 老师还是学生?(输入0代表学生,1代表老师): 1(注:键盘输入) 欢迎你,请输入你所在的部门: math(注:键盘输入) 你的部门名是:math

    【代码解析】在main()函数外部定义了一个共用体info,并在main()函数内代码第10行声明了一个共用体变量personInfo,根据学生和老师身份的不同,personInfo在某个确定的时刻只能取一个值,要么是int型变量grade(代码第18行),要么是字符数组department(代码第24行)。