枚举
一种基本数据类型,它可以让数据更简洁,更易读。用于表述固定个数的种类或可能情况。
语法定义格式
enum 枚举类型名 {element_1, element_2,... element_n};
例
enum weekday {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
对枚举元素按整形常量处理,不能进行赋值(只能定义时赋值); 第一个枚举元素的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。
如果在这个实例中把某个枚举元素的值定义为 5,则其后的元素值从5开始逐个递增加1,其之前的元素从0开始逐个递增加1,以此类推。
enum weekday {Sun, Mon, Tue = 5, Wed, Thu, Fri, Sat};
则枚举元素 Sun, Mon , Tue, Wed, Thu, Fri, Sat 的值分别为 0,1,5,6,7 ,8,9。
再看一个例子:
enum weekday {Sun, Mon, Tue = 5, Wed, Thu, Fri = 3, Sat};
则枚举元素 Sun, Mon , Tue, Wed, Thu, Fri, Sat 的值分别为 0,1,5,6,7 ,3,4。
正因为如此,元素赋值时不能相同,比如
enum weekday {Sun, Mon, Tue = 5, Wed, Thu, Fri = 1, Sat};
则枚举元素 Sun, Mon , Tue, Wed, Thu, Fri, Sat 的值分别为 0, 1,5,6,7 ,1,2。其中 Mon 与 Fri 元素值相同,故编译时会报错。
应用
枚举常常与 switch 结合使用。
#include <iostream>
using namespace std;
int main(void)
{
enum student {pupil, middleSchool_student, highSchool_student = 6, college_student};
student Lihua;
int a;
cin >> a;
Lihua = static_cast<student>(a); // 枚举类型不能直接输入(cin >> Lihua),且赋值时要进行强制类型转换,
//也可用 Lihua = student(a); 但利用 static_cast 进行转换更为严谨
switch (Lihua)
{
case pupil:
cout << "Lihua is a pupil." << endl;
break;
case middleSchool_student:
cout << "Lihua is a middleSchool_student" << endl;
break;
case highSchool_student:
cout << "Lihua is a highSchool_student." << endl;
break;
case college_student:
cout << "Lihua is a college_student" << endl;
break;
default:
cout << "Lihua is not a student" << endl;
}
return 0;
}