C++ enum
作用:增加程序可读性,用来描述状态量。
用法:
enum 枚举名 {
标识符[=整型常数],
...
标识符[=整型常数],
} 枚举变量;
如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始,依次次赋给标识符0, 1, 2, ...。
但当枚举中的某个成员赋值后, 其后的成员按依次加1的规则确定其值。
应用举例:
enum color_set1 { RED, BLUE, WHITE, BLACK }; // 定义枚举类型color_set1
enum week { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; // 定义枚举类型week
性质:
1. 枚举常量代表该枚举类型的变量可能取的值,编译系统为每个枚举常量指定一个整数值,缺省状态下,这个整数就是所列举元素的序号,序号从0开始。
2. 可以在定义枚举类型时为部分或全部枚举常量指定整数值,在指定值之前的枚举常量仍按缺省方式取值,而指定值之后的枚举常量按依次加1的原则取值。
3. 各枚举常量的值可以重复。例如:
// 枚举常量apple=0,orange=1, banana=1,peach=2,grape=3。
enum fruit_set {apple, orange, banana=1, peach, grape}
// 枚举常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分别为7、1、2、3、4、5、6。
enum week {Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat};
4. 枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。例如,以下定义非法:
enum letter_set { 'a','d','F','s','T' }; // 枚举常量不能是字符常量
enum year_set{ 2000,2001,2002,2003,2004,2005 }; // 枚举常量不能是整型常量
5. 可改为以下形式则定义合法:
enum letter_set { a, d, F, s, T };
enum year_set{ y2000, y2001, y2002, y2003, y2004, y2005 };
6. 枚举变量可以直接输出,但不能直接输入。如:cin >> color3; // 非法
7. 不能直接将常量赋给枚举变量。如: color1=1; //非法
8. 不同类型的枚举变量之间不能相互赋值。如: color1=color3; // 非法
9. 枚举变量的输入输出一般都采用switch语句将其转换为字符或字符串;
枚举类型数据的其他处理也往往应用switch语句,以保证程序的合法性和可读性。
相关操作:
1. 枚举变量的值只能取枚举常量表中所列的值,就是整型数的一个子集。
2. 枚举变量占用内存的大小与整型数相同。
3. 枚举变量只能参与赋值和关系运算以及输出操作,参与运算时用其本身的整数值。例如,设有定义:
enum color_set1 { RED, BLUE, WHITE, BLACK } color1, color2;
enum color_set2 { GREEN, RED, YELLOW, WHITE } color3, color4;
则允许的赋值操作如下:
color3=RED; // 将枚举常量值赋给枚举变量
color4=color3; // 相同类型的枚举变量赋值,color4的值为RED
int i=color3; // 将枚举变量赋给整型变量,i的值为1
int j=GREEN; // 将枚举常量赋给整型变量,j的值为0
4. 允许的关系运算有:==、<、>、<=、>=、!=等,例如:
// 比较同类型枚举变量color3,color4是否相等
if (color3==color4) cout<<”相等”;
// 输出的是变量color3与WHITE的比较结果,结果为1
cout << color3 << WHITE;
5. 枚举变量可以直接输出,输出的是变量的整数值。例如:
cout << color3; //输出的是color3的整数值,即RED的整数值1