Bootstrap

1.枚举的使用

枚举

复习: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的用法;
  • 枚举值可以用来作判断比较;
  • 一个整数不能直接赋给一个枚举变量;
  • 定义的枚举的元素后,在程序运行过程就不能改变。
;