Tutorial Study Image

C++ 枚举


2023 年 5 月 28 日, Learn eTutorial
1273

枚举 (Enum) 是一种 C++ 编程中使用的数据类型,它由命名值(例如元素、成员等)组成,这些命名值代表整型常量。它提供了一种定义和分类整型常量的方法。此外,它使代码更简单、更容易维护。在本教程中,您将深入了解 C++ 枚举。

在本教程中,我们将学习如何使用枚举。此外,通过示例,您将了解枚举在 C++ 编程中的常见用途。

C++ 枚举:它是什么?

用户定义数据类型 enum,通常称为枚举,允许您建立一种新的数据类型,其可能值的范围是固定的,并且变量可以从该值集中选择一个值。例如,假设您是一家冰淇淋店的老板,店里只有少量冰淇淋口味。因此,您只希望顾客从您店里的冰淇淋选择中进行选择。这变成了一个枚举,其中冰淇淋是枚举的名称,各种冰淇淋口味是其组成部分。

枚举

  • 枚举是一种用户定义的数据类型,只能为其分配特定数量的值。
  • 在这种类型中,您可以为变量提供一个可能值的列表,变量只能从列表中选择一个。它有一组固定的常量。
  • 'enum' 用于定义枚举。
  • 一旦声明了枚举类型,程序员就会定义这些值。
  • 枚举可用于定义工作日、月份、季节和其他概念。枚举常量隐式地是静态和最终的。

如何在 C++ 中定义枚举?

在 C++ 中,为了定义枚举,必须使用 enum 关键字以及用逗号分隔的元素。

枚举的基本语法如下


enum enum_name{ element1, element2, element3, element4,};
 

or


enum name_of_enum
{
  Element1,
  Element2,
  Element3,
  Element4,
  Element5,
};
 

这里,“enum”关键字告诉代码该做什么,“name_of_enum”是赋予枚举的名称,“Element 1, Element 2,..., Element 5”是已分配给枚举的值。
例如


enum  ice_cream
{
 Vanilla,
Chocolate,
Butterscotch,
Mango,
Pineapple,
Strawberry
}
 

这些组件中的每一个都从 0 开始有一个值,例如香草(0)、巧克力(1)等。在 C++ 中,在声明枚举时可以更改上述默认值。

示例

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

在这种情况下,枚举的名称是 season。夏、冬、春、秋都是 season 类型。冬季默认从 0 开始,春季从 1 开始,依此类推。在声明期间,可以更改枚举元素的默认值(如果必要)。


enum season 
{   winter = 0,
spring = 6, 
autumn = 12,
summer = 18,
};
 

声明

声明枚举变量时,也要包含枚举的名称。


int main()
{
  ice_cream i;
  return 0;
}
 

在这种情况下,枚举变量是 i。

枚举类型的声明

只有在创建枚举类型时才构建变量的蓝图。以下是生成枚举类型变量的方法。


enum season { summer ,winter, autumn,spring };
                                                          
int main(){
enum Seasons s;
return 0;
}
 

这里,名为 Season 的枚举变量显示为 s。此变量将表示一个季节。

枚举变量也可以如下声明


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

另一个例子


enum boolean { false, true };

int main(){
enum boolean check;
return 0;
}
 

在这种情况下,创建了 enum boolean 类型的变量 check。
这是相同 check 变量的替代声明语法。


enum boolean 
{ 
false, true
} check;
 

示例 1

一个使用枚举识别方向的 C++ 程序


#include <iostream>
using namespace std;

enum direction { East, West, North, South  };
int main(){
    direction dir;
    dir = North;
    cout << "The Direction: " << dir;
    return 0;
}
 

输出


The Direction: 2

示例 2

我们使用静态转换运算符来输出 void 指针的内容。它将指针的数据类型从其原始 void* 类型更改为指针存储地址的适当数据类型。

在 C++ 中使用枚举来更改枚举的默认值


#include <iostream>
using namespace std;

enum seasons { spring = 10, summer = 14, autumn = 19, winter = 11};
int main() {
    seasons s;
    s = Autumn;
    cout << "Summer = " << s << endl;
                                                                      
    return 0;
}
 

输出


Autumn = 19

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

枚举 (Enum) 是一种 C++ 编程中使用的数据类型,它由命名值(例如元素、成员等)组成,这些命名值代表整型常量。它提供了一种分类和定义整型常量的方法。此外,它使代码更简单、更容易维护。

枚举仅在变量预期具有可用值之一时使用。

例如


#include <iostream>
using namespace std;
enum direction { East = 10, West = 20, North = 30, South = 40 } dir;
int main() {
    dir = North;
    cout << "The Size of enum variable " << sizeof(North) << " bytes.";   
    return 0;
}
 

输出


The Size of enum variable 4 bytes.

因为一个整数的大小是 4 字节。因此,将枚举与标志一起使用是一个明智的主意。

同样的工作可以使用 C++ 结构完成。但是,使用枚举可以提供灵活性和效率。

枚举如何用于标志?

考虑以下示例

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

考虑为 Windows 程序创建一个按钮。要处理文本,您可以设置 UNDERLINE、ITALICS 和 BOLD 标志。
上述伪代码中的所有整型常量都是 2 的幂是有原因的。

// 在二进制中 UNDERLINE = 00000001 ITALICS = 00000010 BOLD = 00000100

由于整型常量是 2 的幂,您可以使用按位或 | 运算符同时组合两个或多个标志而不会重叠。通过这样做,您可以同时选择两个或多个标志。

例如


#include <iostream>
using namespace std;
enum printFlags { BOLD = 1, ITALICS = 2, UNDERLINE = 4};
int main() {
    int myFlag = UNDERLINE | BOLD ; 

        //    00000001
        //  | 00000100
        //  ___________
        //    00000101
    cout << "Displaying myFlag = " <<  myFlag;

    return 0;
}
 

输出


Displaying myFlag = 5

当输出为 5 时,您总是可以看到粗体和下划线被使用。

您还可以将标志包含在您的要求中。

if (myFlag & ITALICS) { // 斜体语句 }

在这种情况下,斜体已应用于我们的设计。需要记住的一点是,if 语句只包含斜体的代码。在不使用枚举的情况下,您几乎可以在 C++ 编程中完成所有事情。然而,它们在某些情况下可能非常有用。这就是普通程序员与优秀程序员的区别。

C++ 中枚举的优点

以下是枚举的一些优点

  1. switch case 可以使用枚举。
  2. 枚举增加了类型安全。
  3. 可以遍历枚举。
  4. 枚举可以有字段、构造函数和方法。