C++枚举类型教案
一、枚举类型的应用场景
只需要将需要的变量值一一列举出来,便构成一个枚举类型。
二、枚举类型的定义
·定义方式:
- enum 枚举类型名字{枚举常量表};
- enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
- enum color_set{RED,BLUE,WHITE,BLACK};//定义枚举类型color_set
·特别注意:枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。例如,以下定义非法:
- enum year_set{,,,,};//枚举常量不能是整形常量
- enum book_set{'a','b','c','d'};//枚举类型不能是字符常量
三、枚举类型应用说明
1、枚举元素具有默认值。默认从0开始,依次为0,1,2,3......
例如:
- enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
- //默认从0开始,即SUN=0,MON=1,依次为0,1,2,3,4,5,6,SAT=6
2、可以在声明中另行定义枚举元素的值。
- enum Weekday{SUN=,MON=,TUE,WED,THU,FRI,SAT};
- //定义SUN=7,MON=1,则后面的值在前面值的基础上依次加1,即TUE=2,WED=3,......SAT=6
3、枚举类型可以进行关系运算。
例如:
- day1=SUN;//day1中元素SUM的序号值为0
DAY2=MON;//day2中元素MON的序号值为1
if(day2>day1)//day2>day1比较的就是序号值的关系1>0
4.枚举变量可以直接输出,输出的是变量的整数值。
- enum color_set1 {RED, BLUE, WHITE, BLACK};
- color3=RED; //将枚举常量值赋给枚举变量
- cout<< color3; //输出的是color3的整数值,即RED的整数值1
5、整数值不能直接赋给枚举变量,如需将整数赋给枚举变量,应进行强制类型转换。
枚举(隐含转换)整形
整形(显示转换)枚举
1)枚举型数据隐含转换为整型数据(隐含转换)
- int count=MON;//将枚举型数据MON的值赋给整型数据数据count
- int a;
- a=SUN;//枚举值赋给整型变量
- cout<<a;
2)整型数据转换为枚举数据(显式转换)
- result=GameResult(count);//显示转换,括号中的整型数据转换成枚举数据
6、对枚举元素按常量处理,但不能对它们直接赋予常量值。
- SUN=;//SUN是枚举元素,不能赋值,此语句非法
若将整数值赋给枚举变量需要进行强制类型转换:值前面加(类型)
- SUN=(Weekday);//在值前面加(类型)是常用的强制类型转换方法
7、如果为枚举变量赋值,则它们必须是整数。枚举变量相当于整型变量的一个子集。
- enum weekday{SUN=1.1,MON=1.2,......};//枚举变量赋值只能是整数,相当于整型变量的一个子集,此语句非法
四、典型例题——代码运用
1)声明枚举类型Weekday,包括SUNDAY到SATURDAY七个元素在程序中声明Weekday类型的变量,对其赋值,声明整型变量,看看能否对其赋Weekday类型的值。
- #include<iostream>
- using namespace std;
- enum Weekday {SUN,MON,TUE,WED,TUR,FRI,STA};
- int main()
- {
- Weekday day;
- enum Weekday today = FRI;
- day = SUN;
- cout << day << endl << today << endl;
- return ;
- }
实验测试:若将整型数据赋给枚举变量,则会出现以下错误。
- int main()
- {
- Weekday day;
- enum Weekday today = FRI;
- day = 5;//修改为 day =(Weekday)5;
- cout << day << endl << today << endl;
- return ;
- }
完整分析:
- #include<iostream>
- using namespace std;
- enum Weekday { SUN, MON, TUE, WED, TUR, FRI, STA };//声明枚举类型名weekday
- int main()
- {
- Weekday day;
- enum Weekday today = FRI;//枚举型变量 day ,today
- int yesterday;//整型变量 yesterday
- yesterday = TUR;//对整型变量赋weekday型的值,测试是否正确,结果正确:枚举型变量(小)->整形变量(大),隐式转换
- //day = SUN;//对枚举型变量赋weekday型的值,若对枚举形变量赋整型值,是否正确?
- //day = 0;//报错:无法从int型转换为枚举类型weekday
- day = (Weekday);//正确!强制类型转换,格式day=Weekday(0); 也正确
- cout << day << endl << today <<endl<<yesterday<< endl;
- return ;
- }
2)口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中取出3个不同颜色的球,问有多少种取法。
- #include<iostream>
- using namespace std;
- void transfer(int i)//将相应的数值组合通过switch语句转换为字符串
- {
- switch (i)
- {
- case :cout << "red "; break;
- case :cout << "yello "; break;
- case :cout << "blue "; break;
- case :cout << "white "; break;
- case :cout << "black "; break;
- }
- }
- enum ball { red, yello, blue, white, black };//定义球的枚举类型
- int main()
- {
- int i, j, k, count = ;
- for (int i = red; i <= black; i++)
- {
- for (int j = i + ; j <= black; j++)
- {
- for (int k = j + ; k <= black; k++)
- {
- transfer(i);
- transfer(j);
- transfer(k);
- cout << endl;
- count++;
- }
- }
- }
- cout << count;
- return ;
- }
C++枚举类型教案的更多相关文章
- Asp.Net 将枚举类型(enum)绑定到ListControl(DropDownList)控件
在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码: 首先看工具类代码: /// <su ...
- golang枚举类型 - iota用法拾遗
在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...
- 第三条:用私有构造器或者枚举类型强化Singleton属性
1.使用单元素的枚举类型 public enum Singleton implements Serializable { INSTANCE; private String field; public ...
- 在WPF中使用变通方法实现枚举类型的XAML绑定
问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...
- 窥探Swift之别样的枚举类型
想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了.Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性.在 ...
- C#枚举类型的常用操作总结
枚举类型是定义了一组"符号名称/值"配对.枚举类型是强类型的.每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueTy ...
- TypeScript中的枚举类型
TypeScript拓展了Javascript原生的标准数据类型集,增加了枚举类型(enmu)和其他语言一 样 它提供我们一种数字类型的值,用来设置由于辨别的名字和方法 enum Students { ...
- Python 中的枚举类型~转
Python 中的枚举类型 摘要: 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表 ...
- java 枚举类型 构造函数及用法
// 1. 定义枚举类型 public enum Light { // 利用构造函数传参 RED (1), GREEN (3), YELLOW (2); // 定义私有变量 private int n ...
随机推荐
- SQL语句简单增删改查
常用数据类型 Int:整数,长度没有作用 Varchar:字符串,varchar(3)表示最多存放3个字符,1个中文或英文或符合都占1个字符 Decimal:小数,decimal(5,2)表示共存5位 ...
- mysql删除大表
在mysql中遇到一个大表,大概有17G左右,在对这个表进行查询.修改时均遇到了很大的困难,于是想着删除这张表.通常的删除操作可以通过delete.drop.truncate操作,试了这三个命令,但是 ...
- DELPHI LINUX中间件隆重发布
LINUX和WINDOWS是目前最流利的两个服务器操作系统,各种云服务商也是同时提供这2种操作系统的云服务器. 即日起,在原有WINDOWS中间件的产品基础上,再隆重推出新产品:LINUX中间件.这样 ...
- centos7使用MariaDB(转)
转载文章:https://blog.csdn.net/zwkkkk1/article/details/78444581?locationNum=10&fps=1 最近使用centos7,php ...
- Spark(五十二):Spark Scheduler模块之DAGScheduler流程
导入 从一个Job运行过程中来看DAGScheduler是运行在Driver端的,其工作流程如下图: 图中涉及到的词汇概念: 1. RDD——Resillient Distributed Datase ...
- 讲座 - Transposable elements, non-coding RNAs and epigenetic control in embryonic stem cells
Dr. Andrew Paul HutchinsDepartment of BiologySouthern University of Science and Technology, Shenzhen ...
- 我大概知道他在说什么了,是对内存单元的竞争访问吧。Python有GIL,在执行伪码时是原子的。但是伪码之间不保证原子性。 UDP丢包,你是不是做了盲发?没有拥塞控制的情况下,确实会出现丢包严重的情况。你先看看发送速率,还有是否带有拥塞控制。
我大概知道他在说什么了,是对内存单元的竞争访问吧.Python有GIL,在执行伪码时是原子的.但是伪码之间不保证原子性. UDP丢包,你是不是做了盲发?没有拥塞控制的情况下,确实会出现丢包严重的情 ...
- 前端通用下载文件方法(兼容IE)
之前在网上看到一个博主写的前端通用的下载文件的方法,个人觉得很实用,所以mark一下,方便以后查阅 源文地址(源文还有上传/下载excel文件方法) 因为项目要求要兼容IE浏览器,所以完善了一下之前博 ...
- 004 springboot文件上传
关于文件上传,在spring cloud会再经过配置文件的处理,在spring boot则不需要,在这里写一个文件上传的接口. 单文件上传,如果以后写多文件上传再进行补充. 1.文件目录 2.控制器程 ...
- git如何将旧commit的相关notes复制到新commit?
答: git notes copy <old-commit> <new-commit>