C++之enum与switch
发布日期:2022-02-06 00:27:06 浏览次数:44 分类:技术文章

本文共 2833 字,大约阅读时间需要 9 分钟。

Explanation of switch_case

1. switch_case示例

#include "iostream"using namespace std;int main(){
int mark; cout<<"请输入成绩(0~100):"; cin>>mark; switch (mark/20) {
case 5: //当输入mark/20等于5时 {
if(mark>100)//100~119都是mark/20==5,所以要用if语句再次进行过滤 {
cout<<"ERROR"<
=0) {
cout<<"Please work harder!"<

2. 运行结果

在这里插入图片描述

Explanation of enum

1. 枚举量的声明和定义

enum enumType{
Monday, TuesDay, Wednesday, Thursday, Friday, Saturday, Sunday}//这句话有两个作用://1. 声明enumType为新的数据类型,称为枚举;//2. 声明Monday,Tuesday等为符号常量,通常称之为枚举量,其默认值分别为0-6 。enumType Weekday //声明enumType型的变量//然而与基本变量类型不同的是,在不进行强制转换的前提下,只能将定义的枚举量赋值给该enumType型变量,如下:Weekday = Monday;Weekday = Sounday; //不能将其他值赋给枚举变量,如:Weekday = 10; 这是不被允许的,因为10不是枚举量//当然我们也可以利用强制类型转换,将其他类型值赋给枚举变量,我们下面会讲//上面讲到不能将非枚举量赋给枚举变量,那么我们能不能将枚举量赋给非枚举变量呢?int a = Sunday; //这是允许的,因为枚举量是符号常量,这里的赋值编译器会自动把枚举量转换成int类型//前面讲可以对枚举变量进行赋值运算,那枚举变量能不能进行算术运算呢?Weekday++ ; //非法Weekday = Monday + Tuesday; //这是非法的,因为这些操作可能导致违反类型限制//比如:Weekday = Sunday; Weekday++; 首先枚举变量被赋值了枚举量中最后一个值Sunday(值为6),再进行递增的话,Weekday增加到了7,而对于enumType类型来说,7是无效的。//总结来说:对于枚举,只定义了赋值运算,没有定义算术运算//不能对枚举量进行算术运算,那么枚举量能不能参与其他类型变量的运算呢?int a;int a = 1 + Monday; //这是允许的,因为编译器会自动将枚举量转换为int型//我们如何通过强制转换将 非枚举量 赋值给 枚举变量 呢?Weekday = enumType(2);//等同于Weekday=Wednesday; //但是,如果试图将一个超出枚举取值范围的值通过强制转换赋给枚举变量,会出现什么后果呢?Weekday = enumType(20); //结果将是不确定的,这么做不会出错,但是得不到想要的结果

2. 自定义枚举量的值

//前面讲通过定义 enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}//枚举量Monday,Tuesday等的值默认分别为0-6,我们可以显式的设置枚举量的值enum enumType {
Monday=1, Tuesday=2, wednesday=3, Thursday=4, Friday=5, Saturday=6, Sunday=7}//注意指定的值必须是整数//当然也可以显式的定义一部分枚举量的值enum enumType {
Monday=1, Tuesday, Wednesday=1,Thursday,Friday,Saturday,Sunday};//这样Monday、Wednesday均被定义为1,则Tuesday=2,Thursday,Wednesday,Friday,Saturday,Sunday的值分别默认为2、3、4、5//总结:未被初始化的枚举值的默认值将比其他前面的枚举值大1//同时,我们也可以看出枚举量的值可以是相同的

3. 枚举的取值范围

前面讲到可以通过强制转换将其他类型值赋给枚举变量:Weekday=enumType(2); 这是合法的;但是Weekday=enumType(20);这是非法的。

这里涉及枚举取值范围的概念:枚举的上限是 大于最大枚举量的 最小的2的幂 减去1(例如最大枚举量的值为5,大于最大枚举量且为2的幂:8,减去1,为7,所以枚举取值的上限为7);

枚举的下限有两种情况:一、枚举量的最小值不小于0,则下限取值为0;二、枚举量的最小值取值小于0,则枚举的下限是 小于最小枚举量的 最大的2的幂 加上1

举例来讲:

enum enumType1{
First=-5, Second=14, Third=10};//则枚举的上限是16-1=15,枚举的下限是-8+1=-7

4. 枚举的应用:enum与switch结合使用

个人觉得枚举switch是最好的搭档,如下所示:

//枚举和switch是最好的搭档:#include 
using namespace std;enum enumType{
Step0, Step1, Step2, Step3, Done};int main(){
enumType Step; Step = Step0; do {
switch (Step) {
case Step0: {
//语句块; Step = Step1; cout<<"Step0"<

5. 运行结果

依次打印出Step0,Step1,Step2,Step3:

在这里插入图片描述

6. 参考博客

https://blog.csdn.net/bruce_0712/article/details/54984371

转载地址:https://blog.csdn.net/weixin_46181372/article/details/111773503 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Gmapping学习记录
下一篇:GMapping学习记录

发表评论

最新留言

不错!
[***.144.177.141]2024年04月07日 08时15分08秒