![C++ 从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/805/26846805/b_26846805.jpg)
4.5 枚举类型(enum)
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P64_10038.jpg?sign=1739051639-a3plKSsOpE4Dde31fIe7QwH8tdjATJQK-0-d18acde271d69356284c9cd166f68296)
如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
1. 声明枚举类型
enum 类型名 { 枚举常量列表 };
类型名是变量名,指定枚举类型的名称。枚举常量列表也叫枚举元素列表或枚举常量,列出定义的枚举类型的所有可用值,各个值之间用“,”分开。
例如:
enum weekday{sun, mon, tue, wed, thu, fri, sat};
上面声明了一个枚举类型weekday,大括号中sun,mon,…,sat等表示这个类型的变量的值只能是以上7个值之一,它们是用户自己定义的标识符。
2. 枚举变量的说明
枚举变量有多种声明方式:
(1)枚举类型定义与变量声明分开。
例如:
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P65_10176.jpg?sign=1739051639-8YW2zImK43XxXHsnP0MAVTvsqDQQg1Ba-0-9cb43ad15a70354cd4900e8fae916556)
变量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先将枚举类型定义为别名,再利用别名进行变量的声明。
例如:
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P65_10177.jpg?sign=1739051639-daVOYQwf26nLg6HdHRps0R3RMtZpVm83-0-63e4918ad147cd3662d63b461a07e705)
这三种声明变量的方式相同。例如:
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P65_10178.jpg?sign=1739051639-6aU8l6PtHAz1NB4E74GhpmVxetwppX7J-0-64519d1b86855fae62c1e8b37f9f661a)
注意:同一程序中不能定义同类型名的枚举类型;不同枚举类型的枚举元素不能同名。
3. 枚举元素说明
将会为每个枚举元素分配一个整型值,默认从0开始,逐个加1。
【例4-5】编写程序,输出枚举元素的默认值。
(1)在Visual Studio 2017中,新建名称为“4-5.cpp”的Project5文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P65_10179.jpg?sign=1739051639-GSRZwX1LAWckmn2U1MtGeHynFOnWXDij-0-1f42ae718c296e0cd4ea7814a877cd4e)
【程序分析】本例输出的是每个枚举元素分配一个默认值。
在Visual Studio 2017中的运行结果如图4-14所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P66_10323.jpg?sign=1739051639-Ej1TQZDMBE8In5vhTVqiKPZKjihSJqil-0-bd1fb018c97e38bbecc50cdcbc029a5b)
图4-14 枚举类型
也可以在定义枚举类型时对枚举元素赋值,此时,赋值的枚举值为所赋的值,而其他没有赋值的枚举值在前一个枚举值的基础上加1。
【例4-6】编写程序,输出枚举元素的值。
(1)在Visual Studio 2017中,新建名称为“4-6.cpp”的Project6文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P66_10368.jpg?sign=1739051639-atvvgA3JXGcmK4FMAxg4hlgYmhMKgg7g-0-60f9fa7a803006dfd6ef3e2fd936402b)
【程序分析】本例演示了为单个枚举元素赋值后,其他枚举元素的变化。
在Visual Studio 2017中的运行结果如图4-15所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P66_10326.jpg?sign=1739051639-GpvkbEB2LeZy6PIpNsjQtP7NPSybAF6c-0-3a83b348be08f552d726e51bac19456d)
图4-15 枚举元素的值
注意:枚举值是常量不是变量,不能在程序中再为枚举元素赋值。
4. 枚举型与整型的转换
枚举类型可以隐式地转换为int型。
【例4-7】编写程序,将枚举型变量的值赋给整型变量。
(1)在Visual Studio 2017中,新建名称为“4-7.cpp”的Project7文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P66_10369.jpg?sign=1739051639-9kZ0cS4xnrBtglxx8g9bacLB0KyD2HYY-0-44dfdcf013f12624b0b4bc11ec893c09)
【程序分析】本例中先定义一个枚举类型的变量a,并为其赋值。然后定义一个int变量x,并初始化赋值。最后将变量a赋给变量x,并输出它们各自的值。
在Visual Studio 2017中的运行结果如图4-16所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P67_10421.jpg?sign=1739051639-c0PwKD3DzOYmG0NnnZW6UUukIWqUvyoA-0-47f1f166f40a5574065a598e5f28fc69)
图4-16 枚举类型转换成int型
int型不能隐式地转换为枚举型。
例如:
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P67_10501.jpg?sign=1739051639-vCBE4sl0TYkE7HWMC2YaX3pEkxhih3EE-0-f2f1b682151691de7dfaad3f6f1595fb)