C++枚举类型详细解析

1.应用场景

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

2.枚举类型的定义

2.1 定义方式

enum 枚举类型名字
{
    枚举常量表
}

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

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

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

比如

//定义枚举类型colors
enum colors{blue,black,red,green};

//定义枚举类型week
enum week 
{Sun, Mon, Tue, Wed, Thu, Fri, Sat};  

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

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

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

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

2.2 枚举元素的说明

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

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

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

这里写图片描述

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

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

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

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

3.1 变量声明

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

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

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

enum colors{blue,black,red,green};
//声明colors枚举类型的变量
enum colors Picture;
enum colors Gif;
enum colors Graph;

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

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

enum colors
{   
    blue,
    black,
    red,
    green
}Picture,Gif,Graph;
//定义枚举类型并声明colors枚举类型的变量

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

enum 
{   
    blue,
    black,
    red,
    green
}Picture,Gif,Graph;
//定义枚举类型并声明colors枚举类型的变量

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

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

3.2 枚举变量的赋值和操作

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.枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。

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

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

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

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

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

enum color{red,orange,yellow,green,blue};
enum color choice;
choice = red;     //valid
choice = choice+1;  //invalid
choice = 2;    //invalid
choice = red + yellow;     //invalid

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

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

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

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

【写在最后】

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

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

猜你喜欢

转载自blog.csdn.net/loongkingwhat/article/details/78895722
今日推荐