利用枚举,可以定义一个新的整数类型,该类型变量的值域是我们制定的几个可能的值。
例如定义一个星期的枚举Weekday,定义枚举使用关键字enum
enum Weekday
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
上面语句是定义一个新的类型,而不是变量,也就是这个Weekday是和int float 这些是一样的,它也是一个类型来的。
大括号里面的值叫做枚举器或者枚举常量,其数量可任意。每个枚举器都用我们赋予的唯一名称来指定。
这些枚举常量,是对应一个整数,默认是从0开始,后面的逐渐递增1
所以上面的Monday其实就是0,然后Tuesday就是1,然后Sunday就是6.
有了这个类型Weekday,我们就可以使用它来创建变量了。类似int double等
enum Weekday toady = Tuesday;
注意前面的enum,还是必须的
上面的today其实也就是整数中的1
还可以在声明枚举的时候就定义变量。
enum Weekday
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
} today ,yesterday,tomorrow;
上面只是声明了三个变量,并没有初始化它们;
enum Weekday
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
} today = Tuesday , yesterday , tomorrow = Wednesday + 2;
还可以声明的时候初始化,初始化的时候还可以进行算术运算。
注意,在进行运算或者赋值的时候,要确保值是有效的
比如加入today = Sunday +1;或者 yesterday = 7;
这些都是超过了枚举的范围了。
上面的七个枚举常量(枚举器),都有对应的整数,这个整数称为枚举值。
枚举常量要求唯一的。比如不能有两个Monday,但是枚举常量对应的枚举值(整数)却没有要求唯一的。不过呢,除非特殊用法,否则一般还是也是唯一比较好。
枚举常量的值,可以不从0开始。比如
enum Weekday
{
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
} ;
这样的话,那么后面的Tuesday就是2了,然后Sunday就是7,事实上,我们可以任意给这些值赋值的
enum Weekday
{
Monday = 1,
Tuesday=6,
Wednesday,
Thursday=123,
Friday=5,
Saturday,
Sunday=9
} ;
上面,除了Wednesday和Saturday 都指定了值,这要的话,这两个没指定的值,会根据前一个值,自动加+1
这样的话,Saturday 就是6 ,Wednesday就是7. 所以Tuesday和Saturday都是6,所以枚举常量的值是可以重复的。
大家思考一下?如果Monday没有指定,那Monday是多少?
平常使用大家没必要这样。//定义一个枚举类型
enum Weekday
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
//使用这个枚举
enum Weekday today = Monday;
enum Weekday tomorrow = 1;
//不能超过这个枚举常量的有效范围
enum Weekday t2 = 7;
//枚举本质上也是整数,只不过是人为定义好的有意义的整数
enum Weekday2
{
Monday,//第一个枚举器 如果没指定 就是0
Tuesday=4,
Wednesday=4,
Thursday=3,
Friday,
Saturday,
Sunday
} today = 1, yesterday=Sunday-1, tomorrow;//定义枚举类型的时候 马上去声明了三个变量