枚举数据类型是一种由程序员定义的数据类型。其合法值时与它们关联的一组命名整数常量。
它之所以被称为枚举类型,是因为命名常量是作为数据类型定义的一部分而枚举或列出的。以下是枚举类型声明的示例:
enum Roster {Tom, Sharon, Bill, Teresa, John};
该语句将创建一个名为Roster的数据类型。因为enum是C++关键字,所以它必须小写。但是数据类型本身的名字是以大写字母开头的。虽然这并非必须的,但是绝大多数程序员都会采用首字母大写的形式。和Roster数据类型关联的命名整数常量被称为枚举量。Roster数据类型的变量可能只是关联到这些枚举量的值之一,但是他们的值时什么呢?默认情况下,编译器设置第一个枚举量为0,下一个为1,以此类推。在上述示例中,Tom的值时0,Sharon的值时1。
重要的是:enum语句示例并没有创建任何变量。它只是定义数据类型。当以后创建这个数据类型的变量时,他们看起来就是整数,并且这些整数的值被限制在与枚举集合中的符号名称相关联的整数上。
以下语句显示如何定义Roster数据类型的变量:
Roster student;
现在已经创建了student变量,它可以被赋予一个值,如下所示:
student = Sharon;
变量的值可以这样测试:if(student == Sharon)
注意:Sharon没有用引号,因为它是一个命名常量,而不是字符串常量。
即使枚举数据类型中的值实际存储为整数,也不能总是将整数值替换为符号名称。例如,不能使用下面的语句将Sharon赋值给student:
student = 1; //错误。
但是,可以使用整数值而不是符号名称来测试枚举变量。例如,以下两个if语句是等效的:
if(student == Bill)
if(student == 2)
还可以使用关系运算符来比较两个枚举变量。
如前所示,默认情况下,枚举列表中的符号将被赋给整数值0,1,2等等。如果这不合适,则可以指定要赋给的值,如一下示例所示:
enum Department {factory = 1, sales = 2, warehouse = 4};
请记住,如果为枚举符号赋值,则它们必须是整数。一下赋值语句将产生错误:
enum Department {factory = 1.1, sales = 2.1, warehouse = 4.1}; //错误
如果赋值时省略了一个或多个符号,则它们将被赋给一个默认值,看以下示例:
enum Color { red, orange, yellow = 9, green, blue };
该示例中,命名常量red将被赋值为0, orange将为1,yellow将为9,green将为10, blue将为11。
因为枚举数据类型的符号名称与整数值相关联,所以它们可以在switch语句中使用。