枚举类型
1.实验目的
(1)理解枚举类型的优缺点并学会使用枚举类型。
(2)掌握枚举类型的使用条件和各种限制。
2.实验内容
通过一些简单的函数实验来展现枚举类型的使用方式和使用场景。
3.实验过程
基本概念
1. 枚举的定义如下:
1 enum 枚举类型名 {变量值列表};
2. 格式说明:
·关键字enum——指明其后的标识符是一个枚举类型的名字。
·变量值列表——由枚举量构成,各枚举量之间以“ ,”间隔,且必须各不相同。
·举例:
1 例如,我们可以定义一种新的变量类型叫做color来储存不同的颜色: 2 3 enum color{black,blue,green,yellow,red,white,purple};
3. 上述color这句话,有两个作用:
(1) 声明color为新的数据类型,成为枚举(enumeration);
(2) 声明black、blue等为符号常量,通常称为枚举量。
·注意:
(1) 编译系统为每个枚举量(假设有n个)指定一个整型数值,系统默认从0开始,依次为:0,1,2…,n。
1 enum color{ black, blue, green, yellow, red, white, purple }; 2 //black=0,blue=1,green=2,yellow=3,red=4,white=5,purple=6
(2) 可以在定义枚举类型时为部分或全部枚举常量指定整数值,在指定值之前的枚举常量仍按默认方式取值,而指定值之后的枚举常量按依次加1的原则取值。各枚举常量的值可以重复。
enum color{ black, blue=7, green, yellow, red, white, purple }; //black=0,blue=7,green=8,yellow=9,red=10,white=11,purple=12 enum color{ black=7, blue=1, green, yellow, red, white, purple }; //black=7,blue=1,green=2,yellow=3,red=4,white=5,purple=6
(3) 枚举量只能以标识符形式表示,而不能是整型、字符型等文字常量。
例如,下面语句是非法的:
1 enum letter { 'a', 'd', 'F', 's', 'T' }; //枚举常量不能是字符常量 2 3 enum year{ 2000, 2001, 2002, 2003, 2004, 2005 }; //枚举常量不能是整型常量 4 5 //改为以下定义则合法: 6 7 enum letter{ a, d, F, s, T }; 8 9 enum year{ y2000, y2001, y2002, y2003, y2004, y2005 };
4. 枚举变量的使用:
·在上述color这个定义里我们没有使用任何基本数据类型,也就是说我们创造了一个新的数据类型,而它没有基于任何已经存在的数据类型。
(1)定义格式:定义枚举类型过后,就可以定义该枚举类型的变量,如:
1 color mycolor=blue; 2 enum color mycolor = blue; 3 //这两种写法都可以,C++中声明完枚举类型后,声明变量时,可以不写关键字enum 4 //其中的color相当于我们以前使用的int、float...也就是说,mycolor这个变量为color型
也可以类型和变量同时定义(甚至类型名可省),格式如下:
1 enum { black, blue, green, yellow, red, white, purple }mycolor;
(2)枚举量可以进行关系运算,参与运算时用其本身的整数值。例如,设有定义:
1 enum color_set1 { RED, BLUE, WHITE, BLACK } color1, color2; 2 enum color_set2 { GREEN, RED, YELLOW, WHITE } color3, color4;
允许的赋值操作如下:
1 color3 = RED; //将枚举常量值赋给枚举量 2 color4 = color3; //相同类型的枚举量赋值,color4的值为RED 3 int i = color3; //将枚举量赋给整型变量,i的值为0 4 int j = GREEN; //将枚举常量赋给整型变量,j的值为0
不允许的赋值操作如下:
1 BLACK = 0; //BLACK是枚举量,此语句非法。
允许的关系运算符有:==、<、>、<=、>=、!= 等,例如:
1 //比较同类型枚举变量color3,color4是否相等 2 if (color3 == color4) cout << "相等"; 3 //输出的是变量color3与WHITE的比较结果,结果为1 4 cout << color3<WHITE; 5 //不同类型的枚举变量之间不能相互赋值。如: color1=color3; //非法
枚举量的值可以直接输出,输出的是枚举量的整数值:
1 cout << color3; //输出的是color3的整数值,即RED的整数值0
具体实例
例如一场比赛的结果有四种情况,胜(WIN),负(LOSE),平局(TIE),取消(CANCEL),编写程序输出这四种情况。
1 #include<iostream> 2 using namespace std; 3 4 enum GameResult {WIN,LOSE,TIN,CANCEL}; 5 6 int main() 7 { 8 GameResult result; 9 enum GameResult omit = CANCEL; 10 11 for (int count = WIN; count <= CANCEL; count++) { //隐式类型转换 12 result = GameResult(count); //显式类型转换 13 if (result == omit) 14 cout << "The game was cancelled" << endl; 15 else { 16 cout << "The game was played"; 17 if (result == WIN) 18 cout << "and we won!"; 19 if (result == LOSE) 20 cout << "and we lost!"; 21 cout << endl; 22 } 23 } 24 return 0; 25 }
1. 枚举型数据可以和整型数据相互转换
(1) 如上述代码中的:
int count=WIN
就是把枚举类型的数据WIN隐式转换为整型,作为整形变量count的初值。在循环控制条件
Count<=CANCEL
中,也会把枚举类型数据CANCEL隐式转换为count,再与count进行比较。
(2) 而整型数据到枚举数据的转换,则使用显式转换方式,如上述代码中的:
result=GameResult(count);
此外,也可以利用前面介绍过的static_cast完成转换:
result=static_cast<GameResult>(count);
4.实验心得体会
通过这次实验,很清晰的了解了枚举类型的基本语法和使用场景,对枚举类型的使用有更深层次的理解,最重要的是知道了什么时候需要使用枚举来表达程序意义更加符合,同时使用枚举也提高了代码的可读性。