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枚举变量的用法 的相关文章

  • SL4 AutoCompleteBox 重复筛选结果问题

    我在 AutoCompleteBox 过滤方面遇到问题 它似乎记住了之前的过滤器 例如 我输入 A 它会返回 1 项 我删除 A 并输入 Z 这应该返回 1 项 问题是它返回 A 过滤器加上 Z 的结果 我删除 Z 并输入 S 这会带回 2
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 将成员函数作为参数传递/c++

    我想用 C 实现一个类b可以通过封装该迭代器类型的成员集进行某种迭代 喜欢 b object for each x do function f so 函数 f会得到每个人的x成员并做任何事情 比方说 void function f x me
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 不要声明只读可变引用类型 - 为什么不呢?

    我一直在阅读这个问题 https stackoverflow com questions 2274412 immutable readonly reference types fxcop violation do not declare r
  • 当在 Repository/UnitOrWork 之上使用 Service 类时,我应该在哪里放置逻辑不适合 Repository 的常用数据访问代码?

    In my 先前的问题 https stackoverflow com questions 24906548 using the generic repository unit of work pattern in large projec
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

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

    事件驱动框架 五 框架的实现 说明 这里先描述一下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 首先声明一种枚举型变量 该变量的类