C++枚举类型详细解析

小鱼儿 2022-06-03 09:51 491阅读 0赞
    • 应用场景
    • 枚举类型的定义

      • 1 定义方式
      • 2 枚举元素的说明
    • 枚举类型的变量的使用

      • 1 变量声明
      • 2 枚举变量的赋值和操作

1.应用场景

肯定刚刚开始编程的同学和我一样,为什么要用枚举类型,不用枚举类型一样可以码代码。其实,枚举类型可以让我们的代码可读性更高,自己写起来也更方便。

2.枚举类型的定义

2.1 定义方式

  1. enum 枚举类型名字
  2. {
  3. 枚举常量表
  4. }

·关键字enum:说明接下来定义的是一个枚举类型

·枚举类型名字:指明此处定义的枚举类型的名字,就像整型的名字叫int,字符型的名字叫char。

·枚举常量表:由枚举常量(或称枚举成员)构成。枚举常量表列出枚举类型所有可能的取值,各枚举常量之间用“,”间隔,且各枚举常量必须不同。

比如

  1. //定义枚举类型colors
  2. enum colors{blue,black,red,green};
  3. //定义枚举类型week
  4. enum week
  5. {Sun, Mon, Tue, Wed, Thu, Fri, Sat};

·特别注意:枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。例如,以下定义非法:

  1. enum letter_set {
  2. 'a','d','F','s','T'}; //枚举常量不能是字符常量
  3. enum year_set{
  4. 2000,2001,2002,2003,2004,2005}; //枚举常量不能是整型常量

可改为以下形式则定义合法

  1. enum letter_set {a, d, F, s, T};
  2. enum year_set{y2000, y2001, y2002, y2003, y2004, y2005};

2.2 枚举元素的说明

在枚举类型定义的时候,枚举常量表中的常量代表了该枚举类型的变量所有可能取值。编译系统会为每个枚举常量指定一个整型值。为了方便后面的叙述,暂时称作枚举值,即每一个枚举常量,都有一个枚举值与之对应。

· 缺省状态下,这个枚举值就是所列举元素的序号,序号从0开始。

  1. enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
  2. //枚举常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分别为1、2、3、4、5、6、7。

这里写图片描述

· 在定义枚举类型时候,也可以自己对枚举元素赋值。此时,已经被赋值枚举常量的枚举值即为所赋的值。如果存在没有被赋值的枚举常量,则按照指定值之后的枚举常量按依次加1的原则取值。

  1. enum week {Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat};
  2. //枚举常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分别为7、1、2、3、4、5、6。

这里写图片描述
以上屏幕截图来自C++枚举类型详解

3.枚举类型的变量的使用

3.1 变量声明

完成枚举类型的定义之后,就可以使用该类型去声明该类型的变量。用枚举类型声明的变量称为枚举变量。

枚举变量有多种声明方式:

1.枚举类型定义与变量声明分开

  1. enum colors{blue,black,red,green};
  2. //声明colors枚举类型的变量
  3. enum colors Picture;
  4. enum colors Gif;
  5. enum colors Graph;

变量Picture,Gif,Graph都是枚举类型colors下声明的变量。

2.枚举类型定义与变量同时进行

  1. enum colors
  2. {
  3. blue,
  4. black,
  5. red,
  6. green
  7. }Picture,Gif,Graph;
  8. //定义枚举类型并声明colors枚举类型的变量

变量Picture,Gif,Graph都是枚举类型colors下声明的变量。
同时,在这种变量声明的方式下,有时候可以将枚举类型的名字省略。

  1. enum
  2. {
  3. blue,
  4. black,
  5. red,
  6. green
  7. }Picture,Gif,Graph;
  8. //定义枚举类型并声明colors枚举类型的变量

3.用typedef先将枚举类型定义为别名,再利用别名进行变量的声明

此种方法一般不常用,在使用的过程中要注意,同一程序中不能定义同类型名的枚举类型;不同枚举类型的枚举元素不能同名。

3.2 枚举变量的赋值和操作

  1. enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}a,b,c;//定义枚举类型week并声明变量a,b,c

1.枚举常量是常量,不是变量。不能在定义之外的任何地方用赋值语句对它赋值。sun=5;mon=2;sun=mon; 都是错误的。

2.只能把枚举常量赋予枚举类型的变量,不能把枚举常量对应的整数值直接赋予枚举变量。如: a=sum;b=mon; 是正确的。而:a=0;b=1;是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换,如: a=(enum week)2;其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于: a=tue;

3.枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。

综上,可以总结允许的赋值操作有

  1. enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}a,b,c;//定义枚举类型week并声明变量a,b,c
  2. a=Sun; //将枚举常量赋值给枚举变量
  3. b=a;//相同类型的枚举变量赋值,b的值也为Sun
  4. int i = a;//将枚举变量赋给整型变量,i的值为0
  5. int j = Sun;//将枚举常量赋给整型变量,j的值为0

4.枚举变量允许的关系运算有:==、<、>、<=、>=、!=等。例如:

  1. //比较同类型枚举变量a,b是否相等
  2. if (a==b) cout<<”相等”;
  3. //输出的是变量c与Mon的比较结果,结果为1
  4. cout<<c<Mon;

5.枚举变量值只定义了关系运算符和赋值运算符,没有定义算数运算符。例如:

  1. enum color{red,orange,yellow,green,blue};
  2. enum color choice;
  3. choice = red; //valid
  4. choice = choice+1; //invalid
  5. choice = 2; //invalid
  6. choice = red + yellow; //invalid

枚举量是整型,可以自动被提升为int类型,但int类型不能自动转换为枚举类型。如果将枚举类型转化为int类型,如果int值是有效的,可以通过强制类型转换,把它赋值给枚举类型,完成间接的+操作。

  1. int choice_i = choice; //valid
  2. choice_i = 1+ red //valid
  3. int choice_j = yellow; //valid
  4. choice = (enum color)(choice+yellow) //valid
  5. choice = (enum color)2 //valid

6.枚举变量可以直接输出,输出的是变量的整数值。例如:

  1. cout<< a; //输出的是a的整数值,即Sun的整数值0

【写在最后】

本文参考大佬博客shrimp_929: C++枚举类型详解 和big_bit: C/C++ 枚举类型详解和 牧_风: C++枚举类型enum

文中如有错误或未讲解清楚的地方,欢迎留言讨论。

发表评论

表情:
评论列表 (有 0 条评论,491人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C#--StringComparison

    在C\中,StringComparison 枚举用于指定字符串比较操作的规则。字符串比较在各种情况下都非常重要,例如在排序、搜索、区分大小写和不区分大小写的比较等情况下都会用到

    相关 C#——类型

    C\——枚举类型 枚举类型 是由基础整型数值类型的一组命名常量定义的值类型。 若要定义枚举类型,请使用 enum 关键字并指定枚举成员 的名称: enum Se

    相关 C#——类型

    C\——枚举类型 枚举类型 是由基础整型数值类型的一组命名常量定义的值类型。 若要定义枚举类型,请使用 enum 关键字并指定枚举成员 的名称: enum Se

    相关 C#类型

    枚举是开发者可以定义的一个类型。枚举的关键特征是它标识了一个在编译时定义的所有可能值得集合,每个值都由一个名称来引用,这就使得代码更加的易读。我们采用与类相似的语法来定义一个枚