枚举类型是一组用户自定义的类型,被称为枚举(enumeratros),也被称为可能值(possible values)。枚举类型的对象可以取枚举的任意一个值。
枚举(Enumerations)可以用来生成一些任意类型的数据,不只限于数字类型或字符类型,甚至常量true 和false。它的定义形式如下:
enum type_name{
value1;
value2;
value3;
...
...
}object_name;
这里创建了类型 type_name,它可以取 value1, value2,value3,...,中的任意一个值。这个类型的对象(variables)可以直接实例化为
object_names。
例如,我们定义一个存储有不同颜色的新的变量类型 colors_t,如下:
enum colors_t{black, blue, green, cyan, red, purple, yellow, white};
注意在这个定义里我们没有使用任何基本数据类型。换句话说,我们创造了一种的新的数据类型,而它并没有基于任何已存在的数据类型:类型
color_t,花括号{}中包括了它的所有的可能取值。例如,在定义了colors_t 列举类型后,我们可以使用以下表达式 :
colors_t mycolor;
mycolor = blue;
if(mycolor == green) mycolor = red;
实际上,我们的枚举数据类型在编译时是被编译为整型数值的,而它的数值列表可以是任何指定的整型常量 。如果没有指定常量,枚举中第一个列出的
可能值为0 ,后面的每一个值为前面一个值加1。因此,在我们前面定义的数据类型colors_t 中,black 相当于0, blue 相当于 1, green 相当于2
,后面依此类推。
如果我们在定义枚举数据类型的时候明确指定某些可能值(例如第一个)的等价整数值,后面的数值将会在此基础上增加,例如:
enum months_t { january = 1, february, march, april, may, june, july,
august, september, october, november, december}y2k;
在这个例子中,枚举类型 months_t 的变量 y2k 可以是12种可能取值中的任何一个,从 january 到 december ,它们相当于数值1 到 12,而不是0到 11 ,因为我们已经指定 january 等于1。