enum枚举
c++
简介
enum是计算机编程语言中的一种数据类型。枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
定义说明
- 枚举类型定义的一般形式为:
enum 枚举名{ 枚举值表 };
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
例如:
该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。
- 枚举变量的说明
如同结构体(struct)和共用体(union)一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。
设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:
1 |
|
代码示意
C++ 允许程序员创建自己的数据类型,比如本节要将的枚举类型。枚举数据类型是一种由程序员定义的数据类型,其合法值是与它们关联的一组命名整数常量。
之所以被称为枚举类型,就是因为命名常量是作为数据类型定义的一部分而枚举或列出的,以下是枚举类型声明的示例:
enum Roster {Tom, Sharon, Bill, Teresa, John};
默认情况下,编译器设置第一个枚举量为 0,下一个为 1,以此类推。在上述示例中,Tom 的值将是 0,Sharon 的值为 1,等等。最后一个枚举量 John 的值为 4。
定义 Roster 数据类型的变量:
Roster student;
赋值:
student = Sharon;
测试变量的值:
if (student == Sharon)
注:
1.
即使枚举数据类型中的值实际存储为整数,也不能总是将整数值替换为符号名称。例如,不能使用下面的语句将 Sharon 赋值给 student:
student = 1; //错误
但是,可以使用整数值而不是符号名称来测试枚举变量。例如,以下两个 if 语句是等效的:
1 |
|
2.
还可以使用关系运算符来比较两个枚举变量。例如,以下 if 语句确定存储在 student1 中的值是否小于存储在 student2 中的值:
if (student1 <student2)
3.
如前所述,默认情况下,枚举列表中的符号将被赋给整数值 0、1、2 等等。如果这不合适,则可以指定要赋给的值,如以下示例所示:
enum Department { factory = 1, sales = 2, warehouse = 4 };
请记住,如果为枚举符号赋值,则它们必须是整数。以下赋值语句将产生错误:
enum Department { factory = 1.1, sales = 2.2, warehouse = 4.4 }; //错误
4.
如果在赋值时省略了一个或多个符号,则它们将被赋给一个默认值,来看以下 2 个示例:
enum Colors { red, orange, yellow = 9, green, blue };
在该示例中,命名常量 red 将被赋值为 0,orange 将为 1,yellow 将为 9,green 将为 10,blue 将为 11。
enum Rooms { livingroom = 1, den, bedroom, kitchen };
在该示例中,livingroom 被赋值为 1,den 将为 2,bedroom 将为 3,kitchen 将为 4。
5.
枚举数据类型的目的之一是符号名称有助于使程序自我解释。但是,由于这些名称不 是字符串,它们仅在程序中使用。在使用 Roster 数据类型的示例中,以下两个语句将输出 一个 2,而不是名称 Sharon:
1 |
|
6.
因为枚举数据类型的符号名称与整数值相关联,所以它们可以在 switch 语句中使用,如下面的程序所示,该程序还演示了可以使用枚举的数据类型,而不实际创建该类型的任何变量。
1 |
|
输出:
1 |
|
7.
代码测试:
1 |
|