在实际问题中,有些变量的取值被限定在一个有限的范围内。比如一场比赛的结果只有胜、负、平局、比赛取消4种情况;一个袋子里只有红、黄、蓝、白、黑5种颜色的球;一个星期只有星期一、星期二、……、星期日7天。上述的数据只有有限的几种可能值,虽可以用int、char等类型来表示它们,但对数据合法性的检查却是一件很麻烦的事情。C++中的枚举类型专门用来解决这些问题。
定义一个枚举类型的变量,虽然不知道变量具体是什么值,但能知道它可能会有哪些值。这样,就能对程序中所出现的变量的取值有一个很好的估量,从而使程序的编写更加顺利。
枚举类型的定义写结构体的定义相似,其形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数],
} 枚举变量;
-
枚举类型的声明形式如下:
enum 枚举类型名 {变量值列表};
-
例如:
enum Weekday {SUN,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类型。