当前位置: 首页 > news >正文

枚举类型

  在实际的编程应用中,有的变量只有几种可能的取值,譬如说一个家族的几个成员,性别的两种可能等等。C++为这种类型的变量的定义提供了enum关键字。要使用枚举类型的变量,首先需要先定义一个枚举类型名,再声明变量是该枚举类型的。

一、枚举类型的定义

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、枚举元素的说明
(1)在枚举类型定义的时候,枚举常量表中的常量代表了该枚举类型的变量所有可能取值。编译系统会为每个枚举常量指定一个整型值。为了方便后面的叙述,暂时称作枚举值,即每一个枚举常量,都有一个枚举值与之对应。缺省状态下,这个枚举值就是所列举元素的序号,序号从0开始。

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

测试:
m1
(2)在定义枚举类型时候,也可以自己对枚举元素赋值。此时,已经被赋值枚举常量的枚举值即为所赋的值。如果存在没有被赋值的枚举常量,则按照指定值之后的枚举常量按依次加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。

仿照上面例程,自行写测试程序。

二、枚举类型的变量的使用

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先将枚举类型定义为别名,再利用别名进行变量的声明
此种方法一般不常用,在使用的过程中要注意,同一程序中不能定义同类型名的枚举类型;不同枚举类型的枚举元素不能同名。
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的比较结果,结果为1cout<<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

三、学习参考

1、C++枚举类型详细解析
2、探索C语言中的联合体与枚举:数据多面手的完美组合

http://www.wxhsa.cn/company.asp?id=1185

相关文章:

  • 用 C++ + OpenCV + Tesseract 实现英文数字验证码识别(完整可跑)
  • 2025中国HR SaaS市场分析与选型指南
  • jenkins部署消息发送至钉钉--jenkins配置
  • android java层字符串加密对抗
  • Windows10 RDP远程桌面连接被控端wifi自动断开解决
  • 2025春季杭电多校4题解
  • 2025春季杭电多校5题解
  • Window10 关闭Edge浏览器的多选项卡通过Alt+Tab组合键切换的方式
  • 云行 | 国云聚智 AI甬动,天翼云中国行宁波站成功举办!
  • 2025春季杭电多校3题解
  • 华为鸿蒙(4.0)应用开发(4)—ArkTs开发语言 – 每天进步一点点
  • 【人工智能通识专栏】第十讲:阅读理解 - 指南
  • jenkins部署消息发送至钉钉--钉钉配置
  • HyperWorks许可规划
  • [GCJ 2015 #3] River Flow
  • 2025ICPC网络赛第一场题解
  • 拦截抓浏览器数据DrissionPage的演示
  • 登录认证-下篇:基于 Redis 实现共享session登录
  • 用 Go + Tesseract 实现英文数字验证码识别
  • 基于MATLAB的CNN大气散射传播率计算与图像去雾实现
  • .net连接MYSQL数据库字符串参数详细解析(总结)
  • Kubernetes 数据存储
  • 软件工程第一次作业:自我介绍+软工五问
  • 软件著作权市场与加密货币趋势
  • The 3rd Universal Cup. Stage 37: Wuhan
  • 炸裂:SpringAI新版发布,终于支持断线重连了!
  • spring 事务实战:声明式vs 编程式
  • 【JPCS独立出版Fellow杰青云集】2025年先进材料与航空航天结构力学国际学术会议(AMASM 2025)
  • 算法-TSP旅行商问题-03 - jack
  • ArkTS