(1)理解枚举类型的优缺点并学会使用枚举类型。ios
(2)掌握枚举类型的使用条件和各类限制。函数
经过一些简单的函数实验来展示枚举类型的使用方式和使用场景。spa
1. 枚举的定义以下:code
1 enum 枚举类型名 {变量值列表};
2. 格式说明:blog
·关键字enum——指明其后的标识符是一个枚举类型的名字。it
·变量值列表——由枚举量构成,各枚举量之间以“ ,”间隔,且必须各不相同。io
·举例:编译
1 例如,咱们能够定义一种新的变量类型叫作color来储存不一样的颜色: 2 3 enum color{black,blue,green,yellow,red,white,purple};
3. 上述color这句话,有两个做用:ast
(1) 声明color为新的数据类型,成为枚举(enumeration);class
(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);
经过此次实验,很清晰的了解了枚举类型的基本语法和使用场景,对枚举类型的使用有更深层次的理解,最重要的是知道了何时须要使用枚举来表达程序意义更加符合,同时使用枚举也提升了代码的可读性。