![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=1739051689-49veohuYliXyh6cCRj0o9zD6U2O0uenO-0-a8bd015542b2ab6570994ebc6263a6d0)
如果一个变量只有几种可能的值,可以定义为枚举(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=1739051689-4OcJfR8IjMBaN98FY614AxMzob8MMB3W-0-18586c9aaa9f33c046bee18c30894065)
变量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=1739051689-ss9pqUoT4TOWIJFY3l5wToAcRYavLb8n-0-c4b67d70ca3ed49d19d92631bf8bc932)
这三种声明变量的方式相同。例如:
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P65_10178.jpg?sign=1739051689-QrxyIGNdkop0vaDOOhZRM2PYNTZeLjcL-0-a5254d52bf3d059cef2d9fdf44327a8a)
注意:同一程序中不能定义同类型名的枚举类型;不同枚举类型的枚举元素不能同名。
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=1739051689-7zl94VOi9xSKQ8NXsAV2x3pfVJwoUxER-0-1bb246587b24c8e28d60eb421a34cc1a)
【程序分析】本例输出的是每个枚举元素分配一个默认值。
在Visual Studio 2017中的运行结果如图4-14所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P66_10323.jpg?sign=1739051689-FtpSTWLMa2gEfq4Mw6BHh1LKlgTVp6AK-0-dc6474ebab52b1c411b8c837a80bbdb5)
图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=1739051689-6b27GSs0CBbc5QsYukSDFc7tJ045Mpi4-0-52f4a0e8532c317b22fdc562acf05e1d)
【程序分析】本例演示了为单个枚举元素赋值后,其他枚举元素的变化。
在Visual Studio 2017中的运行结果如图4-15所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P66_10326.jpg?sign=1739051689-PY5c9IHnnbC3GKzcGQ0fQIbDQAJZwhYz-0-460b923bcac96cfee56cf1f734c51845)
图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=1739051689-cUqiPTeNfOFWXtDyMLTFtjWbxhAD9asH-0-6a65b3f4756fef3392a9ffabf8a9fd67)
【程序分析】本例中先定义一个枚举类型的变量a,并为其赋值。然后定义一个int变量x,并初始化赋值。最后将变量a赋给变量x,并输出它们各自的值。
在Visual Studio 2017中的运行结果如图4-16所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P67_10421.jpg?sign=1739051689-rADOfBoQr2nrs32e5IEYbXLamm9uYNbt-0-244653e7f335a44e493d129af50145f6)
图4-16 枚举类型转换成int型
int型不能隐式地转换为枚举型。
例如:
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P67_10501.jpg?sign=1739051689-Ow63QLUDIOUk9KxvKpLDx6fNmk9VHmAt-0-f8b8a48d84e4d4040e880b5c11e6bbab)