C++ 枚举的用法说明与实例

本文通过实例介绍了 C++ 中的枚举类型 enum 以及枚举的用法。

枚举是用来表示一个有限的状态或值的类型。

在 C++ 中,枚举是由整数常量组成的用户定义数据类型。要定义枚举,使用关键字 enum。下面是一个枚举的示例:

enum season { spring, summer, autumn, winter };

这里, season 是一个枚举类型, spring, summer, autumnwinter 则是 season 的枚举值。

默认情况下, season 对应的值是 0summer 对应的值是 1,依此类推。当然,如有必要,您可以在声明期间更改枚举元素的默认值,如下:

enum season
{
    spring = 0,
    summer = 4,
    autumn = 8,
    winter = 12
};

声明枚举变量

创建枚举类型时,只会创建一个蓝图。以下是创建枚举类型变量的方法:

enum boolean { false, true };

// 在函数内部声明一个枚举变量
enum boolean check;

这里,创建了一个变量 check, 它是一个 enum boolean 类型的变量。

以下方法同样是声明一个枚举类型的变量,只是和上面的方法略有不同,它同时声明类型和变量:

enum boolean
{
   false, true
} check;

C++ 枚举示例

枚举一般用来组合一组有限的常量值,使其更有意义。这里通过两个实例来看一下枚举类型的用法。

示例 1:使用枚举

在本示例中,定义了一个 week 枚举类型,它定义了一周中的每天的常量值。

#include <iostream>
using namespace std;

enum week { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

int main()
{
    week today;
    today = Wednesday;
    cout << "Day " << today+1;
    return 0;
}
输出
Day 4

示例 2:更改枚举的默认值

在本示例中,我们展示了更改枚举值的默认值的方法。

#include <iostream>
using namespace std;

enum seasons { spring = 34, summer = 4, autumn = 9, winter = 32};

int main() {

    seasons s;

    s = summer;
    cout << "Summer = " << s << endl;

    return 0;
}

这里,我们在定义枚举 seasons 的时候,通过 summer = 4 定义了 summer 的常量值为 4

输出
Summer = 4

为什么在 C++ 编程中使用枚举?

在 C++ 中使用枚举主要有以下两个原因:

  1. 与普通的常量相比,枚举限定了可选的范围,减少了出错的机率。
  2. 使用枚举的效率和灵活性更高。

让我们看一下下面的例子:

#include <iostream>
using namespace std;

enum suit {
    club = 0,
    diamonds = 10,
    hearts = 20,
    spades = 3
} card;

int main()
{
    card = club;
    cout << "枚举变量的大小 " << sizeof(card) << " 个字节。";
    return 0;
}
输出
枚举变量的大小 4 个字节。

这是因为整数的大小是 4 个字节。枚举值对应了整数的值,同时枚举类型限定了可选值的范围,这使得 enum 成为处理标志的好选择。

您也可以使用C++ 结构完成达到相同的目的,但是,使用枚举效率和灵活性更高。

如何使用枚举作为标志?

让我们举个例子。

假设您正在为 Windows 应用程序设计一个按钮。您可以为按钮文本设置标志 斜体 (ITALICS), 粗体 (BOLD) 和下划线 (UNDERLINE)。 我们可以按照如下的方式设计一个枚举类型 designFlags

enum designFlags {
	ITALICS = 1,
	BOLD = 2,
	UNDERLINE = 4
} button;

上面伪代码中所有枚举值对应的常量值都是 2 的次方是有原因的。因为 2 的幂的二进制分别如下:

ITALICS = 00000001
BOLD = 00000010
UNDERLINE = 00000100

由于常量值是 2 的次方,因此您可以使用按位或 | 运算符一次组合两个或多个标志而不会重叠。这允许您一次选择两个或多个标志。例如,

#include <iostream>
using namespace std;

enum designFlags {
    BOLD = 1,
    ITALICS = 2,
    UNDERLINE = 4
};

int main()
{
    int myDesign = BOLD | UNDERLINE;

        //    00000001
        //  | 00000100
        //  ___________
        //    00000101

    cout << myDesign;

    return 0;
}
输出
5

当输出为 5 时,您总是知道使用了粗体和下划线。

此外,您可以根据您的要求添加标志。

if (myDesign & ITALICS) {
    // code for italics
}

在这里,我们在设计中使用了斜体。注意,使用斜体的代码写在if 语句中

总结

  • 在 C++ 中,枚举类型定义了一组有限的状态或者标志值。
  • 枚举值的默认值是可以修改和自定义的。
  • 枚举提高了程序的可读性,并降低了程序出错的机率。

您可以在不使用枚举的情况下完成 C++ 编程中的几乎任何事情。但是,它们在某些情况下可能非常方便。这就是好程序员与优秀程序员的区别。