枚举
复习:C++中switch语句用法
switch(expression){
case constant-expression :
statement(s);
break; // 可选的
case constant-expression :
statement(s);
break; // 可选的
// 您可以有任意数量的 case 语句
default : // 可选的
statement(s);
}
switch语句
等同于无数个if判断语句
,expression 必须是一个整型或枚举类型,或者是一个 class
类型,其中class
有一个单一的转换函数将其转换为整型或枚举类型。其中,每句case
中的break
并不是必须的,如果没有break语句
,程序会接着执行下面的case语句
。
C++枚举类型
枚举类型的定义:枚举类型是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
定义格式:
enum <类型名> {<枚举常量表>};
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定义枚举类型week
枚举常量代表该枚举类型的变量可能取的值,编译系统为每个枚举常量指定一个整数值,默认状态下,这个整数就是所列举元素的序号,序号从0开始。 可以在定义枚举类型时为部分或全部枚举常量指定整数值,在指定值之前的枚举常量仍按默认方式取值,而指定值之后的枚举常量按依次加1的原则取值。 各枚举常量的值可以重复。例如:
enum fruit_set {apple, orange, banana=1, peach, grape}
//枚举常量apple=0,orange=1, banana=1,peach=2,grape=3。
enum week {Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat};
//枚举常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分别为7、1、2、3、4、5、6。
枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。例如,以下定义非法:
enum letter_set {'a','d','F','s','T'}; //枚举常量不能是字符常量
enum year_set{2000,2001,2002,2003,2004,2005}; //枚举常量不能是整型常量
使用:
用week
枚举来举例:
week weekday1, weekday2; //定义了两个枚举类型
weekday1 = Sun; //将枚举常量值赋给枚举变量
weekday2 = weekday2; //相同类型的枚举变量赋值,weekday2的值为Sun
if(weekday1 == weekday2) cout << "相等"; //允许的关系运算有:==、<、>、<=、>=、!=等
cout << weekday2; //可直接输出,输出的结果是变量的整数值,即 0
实例:
还是使用week
来举例:
#include <iostream>
using namespace std;
enum Week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
int main() {
Week weekday;
weekday = Sun;
switch (weekday) {
case Sun:
cout << "星期日";
break;
case Mon:
cout << "星期一";
break;
case Tue:
cout << "星期二";
break;
case Wed:
cout << "星期三";
break;
case Thu:
cout << "星期四";
break;
case Fri:
cout << "星期五";
break;
case Sat:
cout << "星期六";
break;
default:
cout << "无效的星期";
break;
}
return 0;
}
//以下代码是强类型枚举,主要作用就是避免命名冲突
enum class Week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
int main() {
Week weekday = Week::Sun;
switch (weekday) {
case Week::Sun:
cout << "星期日";
break;
case Week::Mon:
cout << "星期一";
break;
case Week::Tue:
cout << "星期二";
break;
case Week::Wed:
cout << "星期三";
break;
case Week::Thu:
cout << "星期四";
break;
case Week::Fri:
cout << "星期五";
break;
case Week::Sat:
cout << "星期六";
break;
default:
cout << "无效的星期";
break;
}
return 0;
}
一些常见问题:
- 初始化时可以赋负数,以后的标识符仍依次加1;
- 枚举变量只能取枚举说明结构中的某个标识符常量;
- 在外部,可以对枚举变量进行赋值,但需要进行类型转换;
- 未区分范围的枚举常数可以隐式转换为
int
,但是int
不可以隐式转换为枚举值; - 将为枚举中的每个名称分配一个整数值,该值与其在枚举中的顺序相对应,默认情况下,为第一个值分配0,为下一个值分配1,依次类推,但可以显式设置枚举名称的值;
- 为名称指定的值不必是唯一的,即各枚举常量的值可以重复;
- 在C语言中,枚举类型名包括关键字
enum
,在C++中允许不写enum
,一般也不写enum
,但保留了C的用法; - 枚举值可以用来作判断比较;
- 一个整数不能直接赋给一个枚举变量;
- 定义的枚举的元素后,在程序运行过程就不能改变。