在实际问题中,有些变量的取值被限定在一个有限的范围内。比如一场比赛的结果只有胜、负、平局、比赛取消4种情况;一个袋子里只有红、黄、蓝、白、黑5种颜色的球;一个星期只有星期一、星期二、……、星期日7天。上述的数据只有有限的几种可能值,虽可以用int、char等类型来表示它们,但对数据合法性的检查却是一件很麻烦的事情。C++中的枚举类型专门用来解决这些问题。
枚举类型的声明形式如下:
enum 枚举类型名 {变量值列表};
例如:
enum Weekday {SUN,MON,TUE,WED,THU,FRI,SAT};
【注】枚举类型是一种基本数据类型,而不是一种构造类型
枚举变量的说明
设有变量a,b,c被说明为上述的Weekday,可采用下述任一种方式:
enum Weekday {MON,TUE,WED,THU,FRI,SAT};
enum a,b,c;
或者
enum Weekday {MON,TUE,WED,THU,FRI,SAT}a,b,c;
或者
enum {MON,TUE,WED,THU,FRI,SAT}a,b,c;
SUN=0; //SUN是枚举元素,此语句非法
枚举元素具有默认值,依次从0开始。例如,SUN的值为0,MON的值为1……SAT的值为6。
可以在声明时对其赋值,则后续变量依次加一。如
enum Weekday {SUN,MON=4,TUE,WED,THU,FRI,SAT}; //其中MON=4,则TUE为5,WED为6……
不能将非枚举量赋值给枚举量,但是可以将枚举量赋值给非枚举量。如:
int a =MON;
在不进行强制转换的前提下,只能将定义的枚举量赋值给该种枚举的变量。例如:
Weekday = MON;或者Weekday = SUN;不能将其他值赋值给枚举变量,
如:Weekday = 10。
不能对其进行算数运算
Weekday++;Weekday=MON+TUESDAY;
这类操作是非法的,因为可能导致违反类型限制。
比如:Weekday=SUN;Weekday++;
Weekday首先被赋值SUN(SUN为6),再递增的话,Weekday递增到7,而7是无效的。
能参与其他类型变量的运算
int a;
a = 1 + MON;
//这是允许的,因为编译器会自动将枚举量转换为int类型。
枚举数据类型的目的之一是符号名称有助于使程序自我解释。但是,由于这些名称不 是字符串,它们仅在程序中使用。
因为枚举数据类型的符号名称与整数值相关联,所以它们可以在 switch 语句中使用,如下面的程序所示,该程序还演示了可以使用枚举的数据类型,而不实际创建该类型的任何变量。
#include <iostream>
using namespace std;
enum Roster{Tom = 1,Sharon,Bill,Teresa,John};
int main()
{
int who;
cin>>who;
switch(who)
{
case Tom:
cout<<"Tom's birthday is Junuary 3\n";
break;
case Sharon:
cout<<"Sharon's birthday is April 22\n";
break;
case Bill:
cout<<"Bill's birthday is December 19\n";
break;
case Teresa:
cout<<"Teresa's birthday is February 2\n";
break;
case John:
cout<<"John's birthday is June 17\n";
break;
default:
cout<<"Invalid selection\n";
}
return 0;
}
原文:https://www.cnblogs.com/xihuashi/p/11519450.html