enum枚举变量的用法

2023-11-12

Class Piece
{
public:
	typedef enum { colorless,white,black } pieceColor;
	enum pieceColor { colorless,white,black };//首先声明一种枚举型变量,该变量的类型名为pieceColor。上面这两种方法均可,建议使用第一种方法
	pieceColor m_color;//然后用该类型来定义变量
	bool SetPiece(POINT position,pieceColor color);//或者用该类型来作为函数的参数
}

如果是在该类外面调用该函数,则函数中枚举变量传参的时候,需要用类名::枚举值 的方式来传参

如:

Piece myPiece;
myPiece.SetPiece(position, Piece::color);

枚举类型若定义时不赋初值,那么会默认对第一个元素赋0,后面的元素依次+1

也可以在定义时给任意的成员赋初值,未赋初值的使用默认值,即比前一元素大1

如:enum test{a=10,b,c=11,d,e}

各个枚举变量的值为:a=10,b=11,c=11,d=12,e=13

因为a赋了初值10b没有初值,所以b默认比a1,即b=11

c赋了初值11,故c=11

de都没有赋初值,故依次加1d=12e=13

同时还要注意枚举是有范围的,但只有两个范围。只要使用枚举不超出范围,就不会报错

若枚举变量中没有负值,则范围是[0,2k-1]

若枚举变量中有负值,则范围是[-2k,2k-1]

 

若定义一个枚举变量,则只能是通过自身枚举成员或者同一枚举类型的其他对象赋值。

如:

enum test { a = 10, b, c = 11, d, e }
test temp1 = 11;//错误,不是test类型而是int类型
test temp2 = test(c);//可以
test temp3 = test(11);//可以,但不推荐
test temp4 = test(1000000);//不会报错,也会得到相应的值1000000,但不推荐

最后两种方式通常不要这样使用,因为有的数值在枚举类型中很可能没有对应的表示。

 

#枚举类型做函数返回值:

函数声明必须有enum关键字:

enum ENUMtest { a, b, c, d, e };
int main(int argc, char** argv)
{
	enum ENUMtest fun();//函数声明必须有enum关键字
	int temp = fun();
	cout << temp << endl;
	system("PAUSE");
}
ENUMtest fun()//函数实现不需要enum关键字
{
	return ENUMtest(1);
}

同理:当枚举类型作为类的成员函数返回值时:

1. 要在声明处加enum关键字

2. 要在函数实现处加类名::枚举名

class A
{
	enum ENUMtest { a, b, c, d, e };
	enum ENUMtest testFun();//函数声明必须有enum关键字
};
A::ENUMtest testFun()//函数实现不需要enum关键字,但必须加类名::枚举名
{
	return ENUMtest(1);
}

小技巧:枚举变量的数量

enum ENUMtest{a,b,c,d,e,count};

如果枚举变量是从0开始以步长为1递增的,那么

只要在枚举变量最后加一个count,该count的值就是枚举变量的数量

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

enum枚举变量的用法 的相关文章

  • 如何将点光源转换为卵形/椭圆形?

    我希望通过具有不同 x 和 y 值的 vec2 半径将当前的圆形光变成椭圆形 有没有办法根据我当前在片段着色器中的代码来做到这一点 uniform struct Light vec4 colour vec3 position vec2 ra
  • 如何管理返回到 QML 的动态分配的 QObject 的生命周期?

    我有这个代码 QVariant componentFromCode QString code QQmlComponent component new QQmlComponent engine engine gt setObjectOwner
  • 将文件扩展名与应用程序关联

    我编写了一个编辑特定文件类型的程序 我想为用户提供在启动时将我的应用程序设置为该文件类型的默认编辑器的选项 因为我不需要安装程序 我尝试编写一个可重用的方法 通过向 HKEY CLASSES ROOT 添加一个键来为我关联一个文件 最好在任
  • float.Parse 不再在 Unity 中工作 (C#)

    我有一个包含以下代码行的工作项目 public InputField mass float val float Parse mass text 非常简单 用户输入一定量的质量 然后将其从文本解析为浮动 几天前这工作得很好 我什至能够多次导出
  • “上下文模式”的这种实现看起来不错吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有多个处理单元可能存在于一个数组中 每个处理单元都有自己的参数 我想使用以下方式传达每个处理单元的参数上下文模式在它被建议作为另一个问题的解答 ht
  • 使用工作表作为数据源的 VSTO Excel 的简单示例

    我想我遇到了 最简单的答案是最难找到的答案 的情况 而且我还没有遇到过任何搜索能够以直接的方式给我这个答案 这是为了Excel 2010 and VS 2010在现有 VSTO C 项目中 我有一个 Excel 工作表 其中包含 4 列数据
  • g++.exe 和 x86_64-w64-mingw32-g++.exe 有什么区别?

    同样的问题也适用于 gcc ar 等 在 Code Blocks 中将工具链可执行文件从 Something exe 更改为 x86 64 w64 mingw32 something exe 时 代码仍然可以完美编译 此外 32 位和 64
  • FileStream - “不支持给定路径的格式”

    我正在尝试使用EPPlus http epplus codeplex com 在我们的 LAN 上保存电子表格 我正在使用一个FileStream对象执行此操作 但是每当我尝试实例化该对象时 我都会收到错误 The given path s
  • 使用正在运行的进程的共享内存收集核心转储

    核心转储仅收集进程空间 而不收集为进程间通信创建的共享内存 如何使核心转储也包含正在运行的进程的共享内存 设置核心文件过滤器 proc PID coredump filter per http man7 org linux man page
  • 将迭代器取消引用到临时范围时出现非指针操作数错误

    Using auto empty line auto str return str size 0 我们做得到 auto line range with first non empty ranges view drop while range
  • 您在 C# 或 .NET 中见过的最奇怪的极端情况是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 C 中初始化结构体的静态数组

    我正在用 C 实现一个纸牌游戏 纸牌有很多种类型 每种纸牌都有大量信息 包括一些需要单独编写与其关联的脚本的操作 给定这样的结构 并且我不确定我的语法是否适合函数指针 struct CARD int value int cost This
  • 使用 PrimarySearcher.FindAll() 时出现内存泄漏

    我也有一个使用插件和应用程序域长时间运行的服务 并且由于使用目录服务而出现内存泄漏 请注意 我正在使用 system directoryservices accountmanagement 但据我了解 它使用相同的底层 ADSI API 因
  • 如何将焦点设置到 Windows 窗体应用程序中的控件?

    在 Windows 窗体应用程序中 when我是否编写代码以在应用程序启动时以及随后调用函数后将焦点设置到控件 例如 如果我有一个 DropDownList 一个 TextBox 和四个按钮 并且我希望将 Focus 设置为 DropDow
  • gcc总是做这种优化吗? (公共子表达式消除)

    作为示例 假设表达式sys gt pot atoms item gt P kind mass在循环内求值 循环只改变item 因此表达式可以简化为atoms item gt P kind mass通过将变量定义为atoms sys gt p
  • 列表框显示类名称而不是值

    我正在开发一个项目 其中用户应该向动物输入值 名称 年龄 性别等 并且用户输入的值应该显示在列表框中 这些类相互继承 以下是继承的工作原理 Animalclass 是所有类的父类 Mammal类继承自Animal class Dog类继承自
  • 串行端口轮询和数据处理

    我正在尝试通过微控制器从传感器的多个串行端口读取数据 每个串口将接收超过2000个测量值 每个测量值7个字节 全部为十六进制 而且他们同时开火 现在我正在从 4 个串行端口进行轮询 另外 我将每个测量值转换为字符串并将其附加到字符串构建器
  • 自定义编译器警告

    在 Net 中使用 ObsoleteAtribute 时 它 会向您发出编译器警告 告诉您该对象 方法 属性已过时 应使用其他内容 我目前正在从事一个需要大量重构前员工代码的项目 我想编写一个自定义属性 可用于标记方法或属性 这些方法或属性
  • 从原始 URL 获取重定向 URL

    我的数据库中有一个表 其中包含一些网站的 URL 我必须打开这些 URL 并验证这些页面上的一些链接 问题是某些 URL 被重定向到其他 URL 对于这样的 URL 我的逻辑是失败的 有什么方法可以传递原始 URL 字符串并获取重定向的 U
  • 使用 STL 迭代器而不初始化它

    我想做这样的事情 container iterator it NULL switch eSomeEnum case Container1 it vecContainer1 begin break case Container2 it vec

随机推荐

  • 事件驱动框架(五)——框架的实现

    事件驱动框架 五 框架的实现 说明 这里先描述一下QP的一些策略和源码 因为某原因这个系列先停更 后面主要是内核介绍 实现 1 临界区 临界区内每次只准许一个线程 进程 进入 进入后不允许其他线程 进程 进入 因此临界区的代码不可分割 在嵌
  • 【axios】get/post请求params/data传参总结

    axios中get post请求方式 1 前言 最近突然发现post请求可以使用params方式传值 然后想总结一下其中的用法 2 1 分类 get请求中没有data传值方式 经过查阅资料 get请求是可以通过body传输数据的 但是许多工
  • jeecgboot接口限制每ip每分钟访问次数——限制ip请求频率【伸手党福利】

    代码借鉴的别人的 自己做过部分修改 1 新建文件夹并新建文件 jeecg boot base jeecg boot base core src main java org jeecg common accesslimit RequestLi
  • Spire.XLS 图表系列教程:C# 填充 Excel 图表中的图例背景色

    默认情况下 创建图表时 Excel会自动设置其坐标轴属性 这些属性包括坐标轴选项 例如边界最大值 边界最小值 主要单位 次要单位 刻度线标记的主要类型 次要类型 标签位置 横坐标轴交叉设置 是否逆序刻度值等 但是有时我们需要手动设置这些属性
  • nginx之配置文件niginx.conf(全网看这一篇就行)

    指定nginx的工作进程的用户及用户组 默认是nobody用户 user nobody 指定工作进程的个数 默认是1个 具体可以根据服务器cpu数量进行设置 比如cpu有4个 可以设置为4 如果不知道cpu的数量 可以设置为auto ngi
  • 【lwIP(第十三章)】WebServer协议

    目录 一 WebServer简介 二 Web服务器工作原理 三 CGI技术简介 四 CGI工作原理 五 SSI技术简介 六 SSI工作原理 一 WebServer简介 Web Server 就是提供 Web 服务的 Server 主要功能是
  • 【GRE】GRE普通考试改革前后区别

    参考张禄老师的视频 首先是官网的总结 从图中看出的几个点 写作 由 argument issue 改为 issue 删除 argument 这意味着写作想获得高分将更加困难 因为大陆考生基本都是靠 argument 拉分的 数学和语文 题量
  • 谈谈我的个人追求

    说到个人追求 我发现我自己都无法说出来 是我没有答案 还是不敢去追求呢 是我的心太浮 要的太多吧 反正这个问题也不是几分钟的思考就可以得到的答案 这个问题 或许需要我一辈子的努力去寻找 见识的东西太少了 视野过于狭隘 愿努力之 看到更大的世
  • 三、MySql 数据类型

    文章标题 Mysql数据类型 Int 类型 INT N 是什么 字符类型 排序规则 时间类型 前文 mysql权限 Mysql数据类型 Int 类型 有无符号 在项目中使用 BIGINT 而且是有符号的 演示 create table te
  • 网络编程——IO模型

    搭建select的TCP客户端 include
  • 100流明相当于多少w_20年前的100元,相当于现在的多少钱?说出来你可能不信

    最近 有网友提出一个问题 他说20年前的100元 相当于现在的多少钱 对此 专家们回答是 2000年我国GDP总量为1 2万亿美元 位居全球第六 到2019年 我国GDP已经高达14 3万亿美元 位居全球第二位 20年时间GDP增长了11
  • 汇编符号语言

    CSDN话题挑战赛第1期 活动详情地址 第1期话题PK赛 参赛话题 汇编知识分享 话题描述 我们的计算机知识就像一座金字塔 底层是数学 上面是数字电路 然后是汇编 再往上是操作系统 网络 数据库 高级编程语言 框架等等 我们不可能精通这个金
  • 前端项目uniapp小兔鲜儿微信小程序项目

    小兔鲜儿 项目起步 项目架构 项目架构图 拉取项目模板代码 项目模板包含 目录结构 项目素材 代码风格 模板地址 git clone http git itcast cn heimaqianduan erabbit uni app vue3
  • 由于找不到msvcp100.dll无法继续执行代码怎么解决

    当遇到程序无法正常运行 提示缺少msvcp100 dll文件时 最初的反应可能是困惑和不知所措 然而 通过修复msvcp100 dll文件 我发现这个问题实际上并不复杂 并且可以通过一些简单的步骤解决 在修复msvcp100 dll文件的时
  • k8s集群部署

    文章目录 1 二进制部署三节点 复用 高可用 k8s 集群 1 1 环境规划阶段 1 1 1 实验架构图 1 1 2 系统版本说明 1 1 3 环境基本信息 1 1 4 k8s 网段划分 1 2 基础安装及优化阶段 1 2 1 系统信息检查
  • mmsegmentation安装教程

    本文是基于Annconda下的安装教程 先要把Annconda安装好 安装好之后打开anaconda prompt控制面板 换成清华源 pip config set global index url https pypi tuna tsin
  • Python 第三方模块 绘图 Seaborn模块2

    四 可视化数据集的分布 1 直方图
  • linux打开网络摄像头失败,Opencv没有检测到linux上的firewire网络摄像头

    我通过firewire连接了一个凸轮 并尝试使用opencv访问它 相机在香菜中被检测到并且能够获得视频流 以下是我使用的代码 include home iiith opencv 2 4 9 include opencv cv h incl
  • JAVA循环使每次循环出来的都是四位数例如0001,0002,0003 三种实现方式

    问题描述 循环使每次循环出来的都是四位数例如0001 0002 0003 现在给出三种实现方式 第一种实现方式 public class temp1 public static void main String args for int i
  • enum枚举变量的用法

    Class Piece public typedef enum colorless white black pieceColor enum pieceColor colorless white black 首先声明一种枚举型变量 该变量的类