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

C++构造数据类型|枚举类型

C++构造数据类型|枚举类型

  • 1. 枚举类型
    • 1.1 函数重载的定义
    • 1.2 枚举类型的声明
    • 1.3 例1:
    • 1.4 例2:
  • 2. 枚举类型的定义说明
  • 3. 枚举类型的使用
    • 3.1 枚举变量的赋值
    • 3.2 枚举变量的运算
    • 3.3 枚举变量的输入
    • 3.4 注意事项
  • 4 示例代码

1. 枚举类型

1.1 函数重载的定义

“枚举”是指将变量所有可能的取值一一列举出来,变量的取值只限于列举出来的常量。 1

1.2 枚举类型的声明

枚举类型的声明的一般形式如下 :
在这里插入图片描述
枚举类型名以及枚举常量为标识符,遵循标识符的取名规则。
在定义一个枚举类型时,定义了多个常量,供枚举类型变量取值,称此常量为枚举常量。当没给各枚举常量指定值时,其值依次默认为0、1、2、…;在定义枚举类型时,也可使用赋值另行指定枚举常量的值。

1.3 例1:

enum  weekday { SUN, MON, TUE, WED, THU, FRI, SAT }

定义了7个枚举常量以及枚举类型weekday。枚举常量具有默认的整数与之对应:SUN的值为0、MON的值为1、TUE为2、…、SAT为6。

1.4 例2:

 enum city{ Beijing,Shanghai,Tianjin=5,Chongqing}

枚举常量Beijing的值为0,Shanghai的值为1,Tianjin的值指定为5。对于指定值后面的没有指定值的枚举常量,编译器会将前一个常量值加1(下一个整数)赋给它,所以Chongqing的值为6。

2. 枚举类型的定义说明

  • 枚举类型定义了以后就可以使用枚举常量、使用用枚举类型来定义变量,定义枚举变量的方法与定义其它变量的方法一样。
    例如:
 enum  city  city1, city2;   city   city1, city2;

用两种不同方法定义了city1city2两个枚举类型的变量名。

  • 枚举类型变量也可以在定义枚举类型的同时定义,例如:
  enum city{Beijing,Shanghai,Tianjin=5,Chongqing} city1, city2;
  • 在定义枚举类型的同时定义枚举类型变量可以省略枚举类型名,例如:
   enum {Beijing,Shanghai,Tianjin=5,Chongqing} city1, city2;
  • 在定义变量时,可以顺便给出初值,若不给初值,默认初值为随机的无意义的数。

3. 枚举类型的使用

3.1 枚举变量的赋值

用枚举类型建立枚举变量后就可以对枚举变量实施赋值以及进行其它运算了,对枚举变量进行赋值,其值要求为同一枚举类型。否则,在编译时出错。
例如:

weekday d1,d2,d3,d4;
d1=SUN;
d2=6;            //错误
d3=Shanghai;     //错误

其中对d2所赋之值是整数6,不是枚举常量;可以采用将一个整型值强制转换成同类型的枚举常量赋给枚举变量。

3.2 枚举变量的运算

枚举常量、枚举类型的变量可进行算术运算、关系运算。
对枚举类型实施算术、关系运算时,枚举值转换成整型值参加运算,结果为整型值。所以,如果要将结果赋给枚举变量,还要将结果转换成枚举值。
例如:

d1=d1+2; //是错误的,因为结果为int型。
//需要将它强制转换成枚举型:
d1=(weekday)(d1+2);

枚举常量、枚举类型的变量可直接进行各种形式的关系运算。
例如:

if(city1==3)if(city2>=Beijing)if(Shanghai==1);
if(city1>SUN);

3.3 枚举变量的输入

枚举类型变量不能直接进行输入
例如:

cin>>d1;   //错误

3.4 注意事项

  • 枚举常量是常量,不是变量,所以不能对枚举常量进行赋值。
    例如: 在上例中不能进行赋值 Shanghai=Beijing
  • 枚举常量的值不是列举的字符串,其值为整数。
  • 编译器对赋给枚举变量的对象(数)进行类型检查,如类型不相符则发出警告。 当类型相同,而值超出此类枚举类型枚举常量范围时,也是正常的。

4 示例代码

/**********************************************************
*  功   能:枚举类型的使用,输入城市代号,输出城市名称      *
**********************************************************/#include<iostream>using namespace std;enum city{ Beijing,Shanghai,Tianjin=6,Chongqing};int main(){int n;cout<<"Input a city number ("<<Beijing-1<<" to exit):"<<endl;cin>>n;while(n>=Beijing){switch(n) {case Beijing: cout<<"Beijing"<<endl;break;case Shanghai:cout<<"Shanghai"<<endl;break;case Tianjin:cout<<"Tianjin"<<endl;break;case Chongqing:cout<<"Chongqing"<<endl;break;default:cout<<"Invalid city number!"<<endl;break;}cin>>n;}return 0;}

  1. 本教程仅供教学使用,参考教材 :《C++语言程序设计教程》,杨进才、沈显君编著,清华大学出版社,2022年1月第4版 ↩︎

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【RH134知识点问答题】第11章 管理网络安全
  • android 12.0SystemUI 状态栏下拉快捷添加截图快捷开关
  • [数据集][目标检测]街灯路灯检测数据集VOC+YOLO格式1893张1类别
  • VMware vSphere Client无法访问和连接ESXi虚拟主机解决思路
  • 深入理解主成分分析 (PCA) 及其广泛应用
  • 百度Q2财报:百度核心利润增长23%超预期 AI驱动业务高质量增长
  • 学习笔记六:ceph介绍以及初始化配置
  • JS SyntaxError: Unexpected token 报错解决
  • Redis 技术详解
  • (LLM) 很笨
  • Spring Cloud Config 与 Spring Cloud Bus 来实现动态配置文件
  • 五大无线领夹麦克风常见“智商税”揭秘:选购时务必留意
  • 【数据结构】二叉树基础知识
  • AI短视频矩阵工具有什么作用?如何托管账号批量发视频?
  • python(8) : win工具[根据占用端口杀死进程]|[检查端口是否被占用]
  • ES6指北【2】—— 箭头函数
  • Android Studio:GIT提交项目到远程仓库
  • Android优雅地处理按钮重复点击
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Median of Two Sorted Arrays
  • mysql 数据库四种事务隔离级别
  • ng6--错误信息小结(持续更新)
  • PHP的类修饰符与访问修饰符
  • python 装饰器(一)
  • windows下如何用phpstorm同步测试服务器
  • 关于extract.autodesk.io的一些说明
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 坑!为什么View.startAnimation不起作用?
  • 跨域
  • 写给高年级小学生看的《Bash 指南》
  • 移动端解决方案学习记录
  • 正则表达式小结
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #vue3 实现前端下载excel文件模板功能
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (14)Hive调优——合并小文件
  • (TOJ2804)Even? Odd?
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (计算机网络)物理层
  • (力扣题库)跳跃游戏II(c++)
  • (四)事件系统
  • (五)网络优化与超参数选择--九五小庞
  • (转载)hibernate缓存
  • (转载)Linux网络编程入门
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!