美文网首页
【C++】枚举类型及其用法

【C++】枚举类型及其用法

作者: 小黑天天快乐 | 来源:发表于2020-02-03 12:31 被阅读0次

C ++包含许多内置数据类型。 但是对于我们想要做的事来说,这些类型有时并不够用。 因此,C ++允许程序员创建自己的数据类型。 这些数据类型称为用户定义数据类型。

也许最简单的用户定义数据类型就是枚举类型(Enumerated Types)。 枚举类型中每个可能的值都定义为符号常量(称为枚举器)。

一、为什么用枚举?

在了解其语法之前,先看看枚举怎么个用途,是否有学的必要呢?其实枚举是很实用的一个工具,主要体现在代码阅读方面。

设想这样一个场景,一个项目,写了上千行,有些常量类型,只有几个固定的取值,在写的时候为了图方便,可以就用数字表示(如0,1,2,3),比如颜色,状态等。这样固然方便,且节省内存,但过了一个月再想看明白这个代码,就不容易了吧。

再退一步,拿颜色举例,有时要用上七八种颜色,如果用数字表示,对应起来也是极不方便,还得想半天,这时,如果颜色就用名字表示,但在内存中还是数字,就舒服得多了。

二、语法

1 定义

在C++中,枚举类型是通过enum关键字定义的,比如定义颜色类型:

enum Color
{
    COLOR_BLACK,
    COLOR_RED,
    COLOR_BLUE,
    COLOR_GREEN,
    COLOR_WHITE,
    COLOR_CYAN,
    COLOR_YELLOW,
    COLOR_MAGENTA, 
};

括号内为该类型所有可能的取值(枚举器),以逗号分隔;大括号结尾要有分号。

注意:因为枚举类型一旦定义,枚举器就相当于全局常量,所以一般枚举器的命名要有前缀且大写,以防止和其他变量名冲突。

2 使用

Color c1(COLOR_WHITE);
Color c2 = COLOR_BLACK;
std::cout << c1 << endl;
std::cout << c2 << endl;

以上代码输出4和0,因为默认情况下,枚举器的值依次为0,1,2...
当然也可以显式地定义各个枚举器的取值

enum Animal
{
    ANIMAL_CAT = -3,
    ANIMAL_DOG, // 自动赋值 -2
    ANIMAL_PIG, // 自动赋值-1
    ANIMAL_HORSE = 5,
    ANIMAL_GIRAFFE = 5, // 与ANIMAL_HORSE共用同一个值
    ANIMAL_CHICKEN // 自动赋值6
};

当一个枚举器的值给定,下一个枚举器默认赋值加1。同时也可对两个枚举器给同样的取值,这时这两个枚举器是完全相同的,可以互换,仅仅名字不同。

三、其他用例

当需要表示一组特定的预定义状态时,枚举类型对于代码可读性而言非常有用。

例如,当函数内部发生错误时,函数通常将整数返回给调用方以表示错误代码。 通常,小的负数用于表示不同的可能的错误代码。例如:

int readFileContents()
{
    if (!openFile())
        return -1;
    if (!readFile())
        return -2;
    if (!parseFile())
        return -3;
 
    return 0; // success
}

但是,使用像这样的数字经常让人云里雾里。 一种替代方法是通过使用枚举类型:

enum ParseResult
{
    SUCCESS = 0,
    ERROR_OPENING_FILE = -1,
    ERROR_READING_FILE = -2,
    ERROR_PARSING_FILE = -3
};
 
ParseResult readFileContents()
{
    if (!openFile())
        return ERROR_OPENING_FILE;
    if (!readFile())
        return ERROR_READING_FILE;
    if (!parsefile())
        return ERROR_PARSING_FILE;
 
    return SUCCESS;
}

这比使用整数返回值更容易阅读和理解。 在使用这个函数时,也将更为方便

if (readFileContents() == SUCCESS)
{
    // do something
}
else
{
    // print error message
}

最后,再提一句,我们常用的布尔类型,其实不过是枚举类型的一个特例,枚举类型在更大程度上丰富了布尔类型的用途。

相关文章

  • 【C++】枚举类型及其用法

    C ++包含许多内置数据类型。 但是对于我们想要做的事来说,这些类型有时并不够用。 因此,C ++允许程序员创建自...

  • C++学习笔记(二)

    1 数据类型 枚举类型枚举类型枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干...

  • 枚举

    枚举 wiki Java的枚举类型用法介绍 深入理解Java枚举类型(enum) 为什么要用enum? 学习计划 ...

  • 枚举类型

    新学到的枚举类型 枚举类型是c/c++都有的一个类型以前从未注意到的类型如:

  • 深入理解C++11核心编程(五)--提高类型安全

    强类型枚举 枚举:分门别类与数值的名字 枚举类型是C及C++中一个基本的内置类型,不过也是一个有点"奇怪"的类型。...

  • modern c++(4)-强类型枚举

    弱类型枚举(weakly typed enum) 一开始,由于C++的枚举类型来源于C,所以出于设计简单的目的,枚...

  • 【c++】枚举类型

    枚举类型的目的 1.枚举类型使代码更具可读性,理解清晰,易于维护 2.如果枚举符号和对应的整数值发生变化,只需修改...

  • C++枚举类型

    enum week { monday, tuesday, wednesday, thurs...

  • 枚举 可选项

    枚举 枚举的基本用法 关联值 如果取值只有几个固定的类型 可以考虑使用枚举 原始值 Character 是原始值的...

  • 七、枚举类型 可选项

    枚举 枚举基本用法 不同于C/OC,枚举成员不会分配默认的整数值当变量已确定为枚举类型,再次赋值可省略 枚举关联值...

网友评论

      本文标题:【C++】枚举类型及其用法

      本文链接:https://www.haomeiwen.com/subject/jpyxxhtx.html