plague0

导航

枚举类型

 

 

 

 

 

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.实验心得体会

通过这次实验,很清晰的了解了枚举类型的基本语法和使用场景,对枚举类型的使用有更深层次的理解,最重要的是知道了什么时候需要使用枚举来表达程序意义更加符合,同时使用枚举也提高了代码的可读性。

posted on 2019-10-20 20:57  plague0  阅读(407)  评论(0编辑  收藏  举报