在程序设计中,有时会用到由若干个有限数据元素组成的集合,如一周内的星期一到星期日七个数据元素组成的集合,由三种颜色红、黄、绿组成的集合,一个工作班组内十个职工组成的集合等等,程序中某个变量取值仅限于集合中的元素。此时,可将这些数据集合定义为枚举类型。因此,枚举类型是某类数据可能取值的集合,如人的性别的集合{man,woman}。可如下定义:
enum TSex{ man,woman};
而且,枚举类型与整型常量值有一定的联系.。上面定义了一个名为TSex的枚举类型,它有2个元素值:man,woman。在编译器编译程序时,给枚举类型中的每一个元素指定一个整型常量值(也称为序号值)。若枚举类型定义中没有指定元素的整型常量值,则整型常量值从0开始依次递增。因此TSex的2个元素man,woman依次对应整型常量值0,1。但是,枚举类型有以下两个特点:
- 不能用键盘通过"cin>>"向枚举变量输入元素值,只能通过初始化或赋值运算符输入。例如:
enum TSex {man,woman} sex1=man;//定义枚举变量时进行初始化
TSex sex2; //定义了一个TSex类型的枚举变量sex2
sex2=man;//通过赋值运算将元素值man赋给sex2
TSex sex3;
cin>>sex3;//这是错误的,无论输入元素值man,woman还是序号值0,1 - 可用"cout<<"输出枚举变量,但输出的是元素对应的序号值,而不是元素值。例如
cout<<sex1<<endl;//输出的是sex1元素man对应的序号值0,而不是元素man。
虽然不能通过键盘直接给枚举变量输入元素值,但是可以将输入的整型常量值强制转换后赋给枚举变量。例如,定义一个性别的枚举类型,通过键盘设定性别,并输出。
方法1:通过符号(int &)
#include <iostream>
using namespace std;
int main()
{
enum TSex {man,woman};//定义枚举类型TSex
TSex sex; //定义枚举变量sex
cout<<"输入0或1:0代表man,1代表woman"<<endl;
cin>>(int &)sex; //通过整型引用给sex赋值
switch(sex) //通过switch循环输出性别
{
case man:cout<<"man"<<endl;break; //不能写成cout<<sex,因为它只会输出序号值0或1
case woman:cout<<"woman"<<endl;break;
default:cout<<"性别输入错误"<<endl;break;
}
return 0;
}
方法2:通过枚举类型(enum TSex)
#include <iostream>
using namespace std;
int main()
{
enum TSex {man,woman};//定义枚举类型TSex
TSex sex; //定义枚举变量sex
int gender;//定义临时变量gender,用于保存输入的序号值
cout<<"输入0或1:0代表man,1代表woman"<<endl;
sex=(enum TSex)gender ; //强制转换
switch(sex) //通过switch循环输出性别
{
case man:cout<<"man"<<endl;break;
case woman:cout<<"woman"<<endl;break;
default:cout<<"性别输入错误"<<endl;break;
}
return 0;
}
参考资料: