C++共用体类型数据的特点

  1. 使用共用体变量的目的是希望用同一个内存段存放几种不同类型的数据。但请注意: 在每一瞬时只能存放其中一种,而不是同时存放几种。
  2. 能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用。
  3. 共用体变量的地址和它的各成员的地址都是同一地址。
  4. 不能对共用体变量名赋值;不能企图引用变量名来得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名作为函数参数。

例7.7 设有若干个人员的数据,其中有学生和教师。学生的数据中包括: 姓名、号码、性别、职业、年级。教师的数据包括: 姓名、号码、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。

现要求把它们放在同一表格中,如果job项为s(学生),则第5项为grade(年级)。即Li是3年级的。如果job项是t(教师),则第5项为position(职务)。Wang是prof(教授)。显然对第5项可以用共用体来处理(将class和position放在同一段内存中)。要求输入人员的数据,然后再输出。为简化起见,只设两个人(一个学生、一个教师)。
程序如下:
#include <iostream>
#include <string>
#include <iomanip>//因为在输出流中使用了控制符setw
using namespace std;
struct
{
   int num;
   char name[10];
   char sex;
   char job;
   union P//声明共用体类型
   {
      int grade;//年级
      char position[10];//职务
   }category;//成员category 为共用体变量
}person[2];//定义共用体数组person,含两个元素
int main( )
{
   int i;
   for(i=0;i<2;i++)//输入两个学生的数据
   {
      cin>>person[i].num>>person[i].name
      >>person[i].sex>>person[i].job;
      if(person[i].job==′s′)
         cin>>person[i].category.grade;//若是学生则输入年级
      else
         if (person[i].job==′t′)
            cin>>person[i].category.position;//若是教师则输入职务
   }
   cout<<endl<<″No. Name sex job grade/position″<<endl;

   for(i=0;i<2;i++)
   {
      if (person[i].job==′s′) cout<<person[i].num<<setw(6)
      <<person[i].name<<″ ″<<person[i].sex <<″ ″
      <<person[i].job<<setw(10)<<person[i].category.grade<<endl;
      else cout<<person[i].num<<setw(6)<<person[i].name
      <<″ ″<<person[i].sex <<″ ″<<person[i].job
      <<setw(10)<<person[i].category.position<<endl;
   }
   return 0;
}
运行情况如下:
101 Li fs 3↙ (注意在输入的字母f和s之间无空格)
102 Wang mt prof↙ (注意在输入的字母m和t之间无空格)
No. Name sex job grade/position 101 Li f s 3 102 Wang m t prof
为了使输出结果上下对齐,在cout语句中用了setw控制符和插入空格。往往需要试验多次。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值