首页 > 编程笔记 > C++笔记 阅读:193

C++ enum枚举类型的用法(非常详细)

实际问题中,有些变量会被限定在一个有限范围内,如一周有 7 天,一年有 12 个月、三原色是红黄蓝等。可以将这些变量声明为枚举类型。所谓枚举,就是可以一一列举的意思。

C++ 中,枚举类型是一些标识符的集合,从形式上看就是用大括号将不同标识符名称放在一起。枚举变量的值只能取括号内的标识符,每个标识符都对应一个整数值,称为枚举常量。

C++枚举类型的定义

枚举类型的一般定义形式如下:
enum 枚举类型名 {标识符列表};
其中,enum 是定义枚举类型的关键字;枚举类型名是一个标识符,后续可用它定义枚举变量;大括号内给出了多个枚举变量可取的值,不同标识符之间用逗号分隔。

例如,下面的代码中,weekday 是新定义的枚举类型名,Sunday、Monday、Tuesday 等称为枚举元素,是用户定义的标识符,表示枚举变量可取的值。
enum weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};

使用枚举类型的说明如下:
1) 枚举元素作为常量,是有值的,C++ 编译器按定义时的顺序默认为其赋值 0, 1, 2, …。例如:
enum weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
相当于:
enum weekday {Sunday=0, Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6};

2) 可以在定义枚举类型时另行指定枚举元素的值。例如:
enum weekday {Sunday=2, Monday=3, Tuesday=4, Wednesday=5, Thursday=0, Friday=1, Saturday=6};

3) 如果只给前几个枚举元素赋值,编译器会给后面标识符自动累加赋值。例如:
enum weekday {Sunday=7, Monday=1, Tuesday, Wednesday, Thursday, Friday, Saturday};
相当于:
enum weekday {Sunday=7, Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6};

C++枚举变量

定义了枚举类型后,可以用它声明枚举变量。同样,可以先定义枚举类型,再声明枚举变量;也可以定义枚举类型的同时声明枚举变量。

例如,下面代码中声明 myworkday 是 weekday 枚举类型变量:
enum weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
weekday myworkday;

还可以忽略枚举类型名,直接定义枚举变量。例如:
enum {sun,mon,tue,wed,thu,fri,sat} workday;
注意,C语言中定义枚举变量时,枚举类型名前要包括 enum 关键字,但 C++ 中允许不写 enum。

关于枚举类型变量的说明如下:
1) 枚举变量的值只能是大括号内某个元素的值。例如,myworkday 的值只能是 Sunday 到 Saturday 7 天中的一天。
myworkday = Tuesday;
myworkday = Saturday;

2) 不能直接将整数赋给枚举变量。例如:
myworkday = 3;  // 错误,不能将整数赋给一个枚举变量
这是因为枚举元素本身就相当于一个整型常量,所以无法再被赋值。

注意,整型虽然不能直接为枚举变量赋值,但通过强制类型转换,可以转换为合适的枚举型数值。


【实例】定义枚举类型,观察其使用方式。其中,每个枚举常量在声明的作用域内都可以看作一个新的数据类型。
#include <iostream>
using namespace std;
enum Color {Red=1, Blue, Green} color;  // 定义枚举变量,并初始化

int main()
{
    int icolor;  // 定义整型变量
    cout << "1 代表红色,2 代表蓝色,3 代表绿色。\n";
    cout << "请输入您要选择的数字:";
    cin >> icolor;  // 输入数据
    switch(icolor)  // 判断 icolor 值
    {
        case Red:  // 枚举常量,Red 表示 1
            cout << "选择红色\n";
            break;
        case Blue:  // 枚举常量,Blue 表示 2
            cout << "选择蓝色\n";
            break;
        case Green:  // 枚举常量,Green 表示 3
            cout << "选择绿色\n";
            break;
        default:
            cout << "??\n";
            break;
    }
    return 0;
}
程序运行结果为:

1 代表红色,2 代表蓝色,3 代表绿色。
请输入您要选择的数字:1
选择红色

C++枚举类型的运算

枚举值相当于整型变量,可以进行运算。枚举值可以和整型变量比较,枚举值之间也可以进行比较。

【实例】定义枚举类型,再利用枚举值进行计算。代码如下:
#include <iostream>
using namespace std;
enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
int main()
{
    Weekday day1, day2;
    day1 = Monday;
    day2 = Saturday;
    int n;
    n = day1;
    n = day2 + 1;  // 可以比较
    if (n > day1)
        cout << "n>day1" << endl;
    if (day1 < day2)
        cout << "day1<day2" << endl;
}
程序运行结果为:

n>day1
day1<day2


【实例】定义枚举类型,再利用枚举值进行减法计算。具体代码如下:
#include <iostream>
using namespace std;
int main()
{
    enum weekday {Sunday=2, Monday=3, Tuesday=4, Wednesday=5, Thursday=0, Friday=1, Saturday=6};
    weekday m_eType1;
    weekday m_eType2;
    m_eType1=Sunday;  // Sunday=2
    m_eType2=Friday;  // Friday=1
    cout << m_eType1-m_eType2 << endl;
}
程序运行结果为:

1

程序直接将两个枚举变量 m_eType1 和 m_eType2 进行减法运算,然后将运算结果输出。

相关文章