枚举是一种用户定义的类型,当某个变量取值是几种可能存在的值时,就可以定义为枚举类型,就是把变量(对象)可能存在的取值一一列举出来。
声明枚举类型: enum MonthType{JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};
所列枚举元素的值按照所列的顺序排序,即:JAN < FEB < MAR < APR······
枚举类型中的枚举元素命名必须符合变量命名规范,eg:
enum letter{'A','B','C'}; //ERROR!
enum rank{1st,2nd,3rd}; //error! 不能以数字开头
枚举类型中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通算术赋值的,(JAN=1)这样是错误的,不过可以在声明枚举类型的时候赋值。
enum MonthType{JAN=1,FEB=2,······};
如果不进行元素赋值操作那么元素将会被系统从0开始递增自动赋值。若你只对第一个元素赋值,那么下一个元素进行前一个元素加1操作。
enum MonthType{JAN=4,FEB,······}; // 这里FEB=5,MAR=6······
那么考虑如下情况呢:
enum some_fruit {apple = 3, orange, banana = 4, bear};
好了,apple == 3, banana == 4; 那么orange和bear呢?记得前面说过一句,默认下”接下来的枚举子取值是前面一个枚举子的取值+1“。既然这两个枚举子没有显式赋值,那么就按照默认规则办事,所以 orange == 4, bear == 5. 从这个例子也可以看出,同一枚举中枚举子的取值不需要唯一。
使用枚举类型,必须定义类型的变量 eg:
MonthType thisMonth;
MonthType thatMonth;
thisMonth=JAN;
thatMonth=2; //error,必须是列举的元素
另一种定义变量的方式,在声明的时候定义:
enum {JAN, FEB, ······} nextDay; //这是一种匿名类型定义
nextDay=FEB;
使用强制类型转换来增量枚举类型变量值:
thisMonth=JAN;
thatMonth=thisMonth; //right
nextMonth=thisMonth++; //compile error!
nextMonth = MonthType(thisMonth+1); // 0+1 MonthType(thisMonth++)也错
cout<<nextMonth; //1
用于做循环语句控制变量:
for (MonthType month = JAN ; month <= DEC ; month = MonthType (month + 1 ) ){···}
1.枚举类型可以用于swith...case语句;
2.枚举类型不支持直接的cin>>和cout<<;
cin>>thisMonth; //error,接受参数类型
cout<<nextMonth; //输出为其标号
3.枚举元素之间比较可以用一下6个操作符: <,>,<=,>=,==.!=
4.枚举类型可作为函数的返回类型。