一、关于enum
在实际问题中,有些变量的取值被限定在一个有限的范围内。比如一场比赛的结果只有胜、负、平局、比赛取消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; }