C++ enum枚举类型的用法(非常详细)
实际问题中,有些变量会被限定在一个有限范围内,如一周有 7 天,一年有 12 个月、三原色是红黄蓝等。可以将这些变量声明为枚举类型。所谓枚举,就是可以一一列举的意思。
C++ 中,枚举类型是一些标识符的集合,从形式上看就是用大括号将不同标识符名称放在一起。枚举变量的值只能取括号内的标识符,每个标识符都对应一个整数值,称为枚举常量。
例如,下面的代码中,weekday 是新定义的枚举类型名,Sunday、Monday、Tuesday 等称为枚举元素,是用户定义的标识符,表示枚举变量可取的值。
使用枚举类型的说明如下:
1) 枚举元素作为常量,是有值的,C++ 编译器按定义时的顺序默认为其赋值 0, 1, 2, …。例如:
2) 可以在定义枚举类型时另行指定枚举元素的值。例如:
3) 如果只给前几个枚举元素赋值,编译器会给后面标识符自动累加赋值。例如:
例如,下面代码中声明 myworkday 是 weekday 枚举类型变量:
还可以忽略枚举类型名,直接定义枚举变量。例如:
关于枚举类型变量的说明如下:
1) 枚举变量的值只能是大括号内某个元素的值。例如,myworkday 的值只能是 Sunday 到 Saturday 7 天中的一天。
2) 不能直接将整数赋给枚举变量。例如:
【实例】定义枚举类型,观察其使用方式。其中,每个枚举常量在声明的作用域内都可以看作一个新的数据类型。
【实例】定义枚举类型,再利用枚举值进行计算。代码如下:
【实例】定义枚举类型,再利用枚举值进行减法计算。具体代码如下:
C++ 中,枚举类型是一些标识符的集合,从形式上看就是用大括号将不同标识符名称放在一起。枚举变量的值只能取括号内的标识符,每个标识符都对应一个整数值,称为枚举常量。
C++枚举类型的定义
枚举类型的一般定义形式如下:enum 枚举类型名 {标识符列表};其中,enum 是定义枚举类型的关键字;枚举类型名是一个标识符,后续可用它定义枚举变量;大括号内给出了多个枚举变量可取的值,不同标识符之间用逗号分隔。
例如,下面的代码中,weekday 是新定义的枚举类型名,Sunday、Monday、Tuesday 等称为枚举元素,是用户定义的标识符,表示枚举变量可取的值。
enum weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
使用枚举类型的说明如下:
1) 枚举元素作为常量,是有值的,C++ 编译器按定义时的顺序默认为其赋值 0, 1, 2, …。例如:
enum weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};相当于:
enum weekday {Sunday=0, Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6};
2) 可以在定义枚举类型时另行指定枚举元素的值。例如:
enum weekday {Sunday=2, Monday=3, Tuesday=4, Wednesday=5, Thursday=0, Friday=1, Saturday=6};
3) 如果只给前几个枚举元素赋值,编译器会给后面标识符自动累加赋值。例如:
enum weekday {Sunday=7, Monday=1, Tuesday, Wednesday, Thursday, Friday, Saturday};相当于:
enum weekday {Sunday=7, Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6};
C++枚举变量
定义了枚举类型后,可以用它声明枚举变量。同样,可以先定义枚举类型,再声明枚举变量;也可以定义枚举类型的同时声明枚举变量。例如,下面代码中声明 myworkday 是 weekday 枚举类型变量:
enum weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; weekday myworkday;
还可以忽略枚举类型名,直接定义枚举变量。例如:
enum {sun,mon,tue,wed,thu,fri,sat} workday;注意,C语言中定义枚举变量时,枚举类型名前要包括 enum 关键字,但 C++ 中允许不写 enum。
关于枚举类型变量的说明如下:
1) 枚举变量的值只能是大括号内某个元素的值。例如,myworkday 的值只能是 Sunday 到 Saturday 7 天中的一天。
myworkday = Tuesday; myworkday = Saturday;
2) 不能直接将整数赋给枚举变量。例如:
myworkday = 3; // 错误,不能将整数赋给一个枚举变量这是因为枚举元素本身就相当于一个整型常量,所以无法再被赋值。
注意,整型虽然不能直接为枚举变量赋值,但通过强制类型转换,可以转换为合适的枚举型数值。
【实例】定义枚举类型,观察其使用方式。其中,每个枚举常量在声明的作用域内都可以看作一个新的数据类型。
#include <iostream> using namespace std; enum Color {Red=1, Blue, Green} color; // 定义枚举变量,并初始化 int main() { int icolor; // 定义整型变量 cout << "1 代表红色,2 代表蓝色,3 代表绿色。\n"; cout << "请输入您要选择的数字:"; cin >> icolor; // 输入数据 switch(icolor) // 判断 icolor 值 { case Red: // 枚举常量,Red 表示 1 cout << "选择红色\n"; break; case Blue: // 枚举常量,Blue 表示 2 cout << "选择蓝色\n"; break; case Green: // 枚举常量,Green 表示 3 cout << "选择绿色\n"; break; default: cout << "??\n"; break; } return 0; }程序运行结果为:
1 代表红色,2 代表蓝色,3 代表绿色。
请输入您要选择的数字:1
选择红色
C++枚举类型的运算
枚举值相当于整型变量,可以进行运算。枚举值可以和整型变量比较,枚举值之间也可以进行比较。【实例】定义枚举类型,再利用枚举值进行计算。代码如下:
#include <iostream> using namespace std; enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; int main() { Weekday day1, day2; day1 = Monday; day2 = Saturday; int n; n = day1; n = day2 + 1; // 可以比较 if (n > day1) cout << "n>day1" << endl; if (day1 < day2) cout << "day1<day2" << endl; }程序运行结果为:
n>day1
day1<day2
【实例】定义枚举类型,再利用枚举值进行减法计算。具体代码如下:
#include <iostream> using namespace std; int main() { enum weekday {Sunday=2, Monday=3, Tuesday=4, Wednesday=5, Thursday=0, Friday=1, Saturday=6}; weekday m_eType1; weekday m_eType2; m_eType1=Sunday; // Sunday=2 m_eType2=Friday; // Friday=1 cout << m_eType1-m_eType2 << endl; }程序运行结果为:
1
程序直接将两个枚举变量 m_eType1 和 m_eType2 进行减法运算,然后将运算结果输出。