
4.5 枚举类型(enum)

如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
1. 声明枚举类型
enum 类型名 { 枚举常量列表 };
类型名是变量名,指定枚举类型的名称。枚举常量列表也叫枚举元素列表或枚举常量,列出定义的枚举类型的所有可用值,各个值之间用“,”分开。
例如:
enum weekday{sun, mon, tue, wed, thu, fri, sat};
上面声明了一个枚举类型weekday,大括号中sun,mon,…,sat等表示这个类型的变量的值只能是以上7个值之一,它们是用户自己定义的标识符。
2. 枚举变量的说明
枚举变量有多种声明方式:
(1)枚举类型定义与变量声明分开。
例如:

变量a,b,c的类型都定义为枚举类型enum Blue。
(2)枚举类型定义与变量声明同时进行。
例如:
enum Color { Blue, Red, Green, Yellow }a,b,c;
该语句还可以省略类型名,如以下的声明也是可以的:
enum { Blue, Red, Green, Yellow }a,b,c;
(3)用typedef先将枚举类型定义为别名,再利用别名进行变量的声明。
例如:

这三种声明变量的方式相同。例如:

注意:同一程序中不能定义同类型名的枚举类型;不同枚举类型的枚举元素不能同名。
3. 枚举元素说明
将会为每个枚举元素分配一个整型值,默认从0开始,逐个加1。
【例4-5】编写程序,输出枚举元素的默认值。
(1)在Visual Studio 2017中,新建名称为“4-5.cpp”的Project5文件。
(2)在代码编辑区域输入以下代码。

【程序分析】本例输出的是每个枚举元素分配一个默认值。
在Visual Studio 2017中的运行结果如图4-14所示。

图4-14 枚举类型
也可以在定义枚举类型时对枚举元素赋值,此时,赋值的枚举值为所赋的值,而其他没有赋值的枚举值在前一个枚举值的基础上加1。
【例4-6】编写程序,输出枚举元素的值。
(1)在Visual Studio 2017中,新建名称为“4-6.cpp”的Project6文件。
(2)在代码编辑区域输入以下代码。

【程序分析】本例演示了为单个枚举元素赋值后,其他枚举元素的变化。
在Visual Studio 2017中的运行结果如图4-15所示。

图4-15 枚举元素的值
注意:枚举值是常量不是变量,不能在程序中再为枚举元素赋值。
4. 枚举型与整型的转换
枚举类型可以隐式地转换为int型。
【例4-7】编写程序,将枚举型变量的值赋给整型变量。
(1)在Visual Studio 2017中,新建名称为“4-7.cpp”的Project7文件。
(2)在代码编辑区域输入以下代码。

【程序分析】本例中先定义一个枚举类型的变量a,并为其赋值。然后定义一个int变量x,并初始化赋值。最后将变量a赋给变量x,并输出它们各自的值。
在Visual Studio 2017中的运行结果如图4-16所示。

图4-16 枚举类型转换成int型
int型不能隐式地转换为枚举型。
例如:
