枚举等价于常量。C/C++语言可以使用#define和const创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照一定的规则进行。
枚举类型的定义
enum weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
定义了一个枚举类型weekday,其中Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday为枚举量,都表示整常数。在默认情况下,分别表示从0到6。
也可改变他们的值,如:
enum weekday {Monday=1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
因为第一个表示1,因此后面的枚举量分别表示2-7。
也可以明确定义每个枚举量的值,如:
enum weekday {Monday=1, Tuesday, Wednesday=5, Thursday, Friday=8, Saturday, Sunday};
则枚举常量分别表示1,2,5,6,8,9,10。
总结:未被初始化的枚举值的值默认将比其前面的枚举值大1。
枚举名也不是必须的,没有名的枚举类型称为匿名枚举。如:
enum {MALE,FEMALE};
使用: int n=MALE;
等价于
const int MALE=0;
CONST INT FEMALE=1;
枚举变量的定义
有了枚举类型后,就可以定义它的变量:
weekday day;
其中,day只能在weekday的枚举常量范围内取值,否则会编译错误。
枚举变量的赋值
enum weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} a,b,c;
a=Sunday;
b=Monday;
c=Tuesday;
则a,b,c的值分别为6,0,1。
不能用整数给枚举变量赋值。如a=0;,这是错误的。 但可以加强制转换:a=(weekday)0;相当于a=Monday。
下面的方法,创建一个枚举类型为weekday的枚举变量week,并赋值为weekday(2),即值为2。 枚举的取值范围 举例来讲: 完美的和switch语句结合
weekday week(weekday(2));
cout<
前面讲到可以通过强制转换将其他类型值赋给枚举变量:Week = weekday(2);这是合法的;但是Week = weekday(20);是非法的。
这里涉及枚举取值范围的概念:枚举的上限是 大于最大枚举量的最小的2的幂,减去1;
枚举的下限有两种情况:一、枚举量的最小值不小于0,则枚举下限取0;二、枚举量的最小值小于0,则枚举下限是 小于最小枚举量的 最大的2的幂,加上1。
假如定义 enum enumType1 { First=-5,Second=14,Third=10 };
则枚举的上限是16-1=15(16大于最大枚举量14,且为2的幂);
枚举的下限是-8+1=-7(-8小于最小枚举量-5,且为2的幂);2.枚举应用
enum enumType{Step0, Step1, Step2} Step=Step0;//在声明枚举的时候直接定义了枚举变量Step,并初始化为Step0
enum e(enum(2));
switch (Step)
{
case Step0:{...;break;}
case Step1:{...;break;}
case Step2:{...;break;}
default:break;
}