C++_CH17_枚举

C++_CH17_枚举

1.1 定义

枚举(ENUM),是enumeration的缩写。是为了让一组数值集合成为一种类型。

1.2一个例子

#include <iostream>enum Example
{A,B,C;//说明你想让哪些数成为组合,默认第一个为0,之后每一个加1
};int a = 0;
int b = 1;
int c = 2;
//此时Example类型就只能赋这三个值
int main()
{Example val = 10;//这样会报错
}

枚举就是规定一个类型,这个类型是一些整数的集合。如果定义一个这个类型的变量,则这个变量的值只能在这一整数集合里取。

当然A、B、C的取值可以不是默认的这几个,可以自己赋值

#include <iostream>enum Example
{A = 10,B = 100,C = 1000;//说明你想让哪些数成为组合,默认第一个为0,之后每一个加1//如果B、C不赋值,则默认是A的基础上加1.
};int a = 0;
int b = 1;
int c = 2;
//此时Example类型就只能赋这三个值
int main()
{Example val = 10;//这样会报错
}

另外,还可以给enum规定一些整数簇,以节约内存的使用:

#include <iostream>enum Example: unsigned char //从32位变为8位
{A = 10,B = 100,C = 1000;//说明你想让哪些数成为组合,默认第一个为0,之后每一个加1//如果B、C不赋值,则默认是A的基础上加1.
};int a = 0;
int b = 1;
int c = 2;
//此时Example类型就只能赋这三个值
int main()
{Example val = 10;//这样会报错
}

整数簇有哪些:
数据归类
注意必须是整数簇,浮点簇就不行:

#include <iostream>enum Example: float //报错
{A = 10,B = 100,C = 1000;//说明你想让哪些数成为组合,默认第一个为0,之后每一个加1//如果B、C不赋值,则默认是A的基础上加1.
};int a = 0;
int b = 1;
int c = 2;
//此时Example类型就只能赋这三个值
int main()
{Example val = 10;//这样会报错
}

1.3 用enum给之前的日志类升级

之前我们有一个日志类:

#include<iostream>class Log	
{
public:const int LogLevelWarn = 0;const int LogLevelTrace = 1;const int LogLevelError = 2; //这一段就特别适合用enumprivate://定义私有的一个变量,保存我们想要的log的levelint m_LogLevel = LogLevelError;//默认定义为2public:void SetLevel(int level){m_LogLevel = level;//把外部我们给的level给m_LogLevel,对本来的2进行了修改}void warn(const char* message){if(m_LogLevel >= LogLevelWarn){std::cout<<"<WARN>"<<std::endl;}}void trace(const char* message){if(m_LogLevel >= LogLevelTrace){std::cout<<"<TRACE>"<<message<<std::endl;}}void error(const char* message){if(m_LogLevel >= LogLevelError){std::cout<<"<ERROR>"<<message<<std::endl;}}
};int main()
{Log log; //创建一个Log类型的instance名字叫log‘log.SetLevel(log.LogLevelError);//使用log里的SetLevel方法,让我们输入希望展示的level层级,修改这里的参数,填入我们想要的层级。log.warn("Hello");//warn层级log.trace("Hello"); //追踪层级log.error("Hello"); //错误层级}

用enum升级:

#include<iostream>class Log
{
public:enum LEVEL{levelWARN = 0, levelTRACE, levelERROR // 枚举类型命名更清晰};private:LEVEL m_LogLevel = levelERROR; // 使用枚举类型别名public:void SetLevel(LEVEL level){m_LogLevel = level;}void warn(const char* message){if(m_LogLevel <= levelWARN) // 修正条件检查,确保级别足够低{std::cout<<"<WARN> "<<message<<std::endl; // 输出消息}}void trace(const char* message){if(m_LogLevel <= levelTRACE) // 同上{std::cout<<"<TRACE> "<<message<<std::endl; // 输出消息}}void error(const char* message){if(m_LogLevel <= levelERROR) // 同上{std::cout<<"<ERROR> "<<message<<std::endl; // 输出消息}}
};int main()
{Log log; // 创建Log实例log.SetLevel(Log::levelERROR); // 修正SetLevel的参数使用log.warn("Hello");log.trace("Hello");log.error("Hello");return 0; // 添加返回值
}

output:
Hello

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux的远程登录教程(超详细)

我们在进行远程登录时要用的一种协议叫SSH&#xff0c;那什么叫SSH呢&#xff1f; SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于在不安全的网络中提供安全的远程登录和其他网络服务。它通过加密技术确保数据在传输过程中的机密性和完整性&#xff…

实训第三十二天(学习playbook-roles,脚本创建数据库和表,mycat读写分离)

1、roles&#xff08;角色&#xff09;介绍 roles(⻆⾊): 就是通过分别将variables, tasks及handlers等放置于单独 的⽬录中,并可以便捷地调⽤它们的⼀种机制。 假设我们要写⼀个playbook来安装管理lamp环境&#xff0c;那么这个 playbook就会写很⻓。所以我们希望把这个很⼤的…

vite-plugin-svg-icons 用法

vite-plugin-svg-icons 是一个 Vite 插件&#xff0c;用于将本地 SVG 文件转换为可直接在 Vue 组件中使用的图标。这个插件能够自动扫描指定目录下的 SVG 文件&#xff0c;并将其注册为 Vue 组件&#xff0c;从而简化了在 Vue 项目中使用 SVG 图标的过程。 1. 安装插件 首先&…

C++ 图形框架 Duilib

Duilib是一个开源的DirectUI界面库&#xff0c;遵循BSD协议&#xff0c;可以免费用于商业项目。它具有以下特点&#xff1a; 简约易扩展的设计&#xff1a;Duilib遵循简洁、清晰的设计理念&#xff0c;使得用户界面更加直观、易于使用。同时&#xff0c;它也提供了丰富的扩展接…

从被动应对到主动防御:开发团队技术故障处理能力的全面升级,未雨绸缪,制胜未来!

开发团队如何应对突发的技术故障和危机&#xff1f; 网易云音乐 时间&#xff1a;2024年8月19日下午 问题&#xff1a; 服务器故障&#xff1a;网易云音乐网页端出现“502 Bad Gateway”报错&#xff0c;App也无法正常使用。影响&#xff1a;用户无法正常登录和使用app、we…

MAC +win10 笔记本, OBS 桌面音频不起作用 问题 总结

现象: MAC+WIN10笔记本,音频是好好的,可以听,但是OBS使用的时候,桌面音频条,保持静止,录制的视频,也没有系统声音。 问题排查 1、通常的OBS无法捕获音频解决方法 1)、 驱动问题,更新到最新驱动 2)、声音参数配置问题 3)、右侧小喇叭,音量合成器中, 4)、设…

Vue.js 样式绑定

Vue.js 样式绑定 Vue.js 是一种流行的前端框架&#xff0c;它提供了一种简洁而强大的方式来绑定样式到元素上。样式绑定允许开发者根据组件的状态动态地改变元素的样式。在 Vue 中&#xff0c;样式绑定可以通过多种方式实现&#xff0c;包括类绑定、内联样式绑定和计算属性样式…

qt父类和子类转换的安全性问题

在 Qt 中&#xff0c;父类和子类之间的转换遵循 C 的类型转换规则。以下是关于父类和子类转换安全性的详细说明&#xff1a; 1. 向上转型&#xff08;Upcasting&#xff09; 定义&#xff1a;将子类对象转换为父类对象。安全性&#xff1a;这是安全的&#xff0c;因为子类对象…

【Word与WPS如何冻结首行首列及窗口】

1.Word如何冻结首行首列及窗口 microsoft word 中锁定表头是一项实用的功能&#xff0c;可让您在滚动文档时保持表头可见。这在处理大型文档或包含大量数据的表格时非常有用。php小编柚子将为您详细介绍 word 锁定表头位置的方法&#xff0c;帮助您轻松掌握这项实用技巧。 1.…

2024国内十大API接口服务平台

在2024年&#xff0c;国内有许多优秀的API接口服务平台&#xff0c;这些平台为开发者和企业提供了丰富的API资源和便捷的服务。以下是国内十大API接口服务平台的简要介绍&#xff08;排名不分先后&#xff09;&#xff1a; 挖数据&#xff1a; 挖数据是一家专注于大数据服务的…

【STM32】驱动LCD

没买LCD屏&#xff0c;没有上机实践&#xff0c;只是学习了理论。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 屏幕接口 2 屏幕驱动的基本步骤 3 8080时序的各信号线 4 8080的读和写 5 屏…

<Rust>egui学习之小部件(八):如何在窗口中添加滑动条slider部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析&#xff0c;主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统&#xff1a;windows 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;egui、eframe 概述 本文是本专栏的第八篇博…

使用redis模拟cookie-session,例子:实现验证码功能

目录 在前后端分离架构中不建议使用cookie-session机制实现端状态识别 所以我们可以使用redis来模拟session-cookie机制 下面我们通过实现验证码的功能来举例 第一步&#xff1a;了解前端要我们返回的数据变量名字&#xff0c;变量类型 1.封装code,data成一个result类&…

Linux网络配置实例,主机名和hosts映射

目录 linux网络配置实例 第一种方法&#xff08;自动获取&#xff09; 第二种方法&#xff08;指定ip&#xff09; 重启网络服务或者重启系统生效 设置主机名和hosts映射 设置主机名 设置hosts映射 主机名解析过程分析&#xff08;Hosts&#xff0c;DNS&#xff09; …

指针初阶(指针与二维数组)

0.二维数组特性 ①.存储格式 二维数组&#xff0c;在存储空间内的存储顺序是连续存储&#xff0c;按行优先存。 假设定义一个2X3的数组&#xff0c;其在存储空间的存储格式如下&#xff1a; ②.表示方法 且二维数组还有一个特性&#xff0c;例如有二维数组 a[3][2] ,那么 a[0] …

基于Spring的三方平台接口对接方法(OkHttp/RestTemplate/视图)

本文介绍了三方平台接口对接方法&#xff0c;一是基于OkHttp请求工具及dom4j报文封装解析xml的方法&#xff0c;二是采用RestTemplate方法封装请求&#xff0c;三是采用建立视图和从库数据源的方式查询。 一、OkHttp请求工具及dom4j报文封装解析 1、 依赖引入 <!-- okhtt…

CleanClip for Mac v2.2.0 剪贴板历史管理软件正式激活版

CleanClip 是一款专为 Mac 用户设计的强大剪贴板历史管理工具。它能够自动保存您复制的内容,让您轻松访问和管理剪贴板历史记录,大大提高工作效率。 下载地址&#xff1a;CleanClip for Mac v2.2.0 剪贴板历史管理软件正式激活版 主要特点 自动保存剪贴板历史 CleanClip 会自…

SOMEIP_ETS_074: Wrong_Interface_Version

测试目的&#xff1a; 验证当设备&#xff08;DUT&#xff09;接收到一个包含错误接口版本的SOME/IP请求时&#xff0c;是否能够返回错误消息或忽略该请求。 描述 本测试用例旨在检查DUT在处理一个echoUINT8方法的SOME/IP消息时&#xff0c;如果消息中包含的接口版本不正确&…

[ACP云计算]易错题(原题)

ECS 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 23、 24、 25、 26、 27、 28、 29、 30、 31、 32、 33、 34、 35、 36、 37、 对象存储OSS 1、 2、 3、 4、 5、 6、 重点&#xff01;&#xff01;&#xff…

ARM 寻址举例(19)

举例&#xff1a; 计算一个数组的所有元素的和。 area first, code, readonly code32entry startldr r0,array ; adr r0,array &#xff1b;ADR为小范围的地址读取伪指令 loopldr r1,[r0],#4cmp r1,#0addne r4,r4,r1bne loop stopb stop; DCD…