第一篇:容易遗忘的“枚举”
前言
在C/C++代码中,经常看到枚举类型的变量。那么枚举类型有啥用?枚举类型具体又该如何使用?
本文将结合具体实例为你解答。
枚举类型有啥用?
在编程中,我们经常需要为某些属性定义一组可选择的值。打个比方,我现在要编写一个文件处理程序,那么我就要先定义一个状态变量,然后用一组值来表示文件的打开,关闭等状态。
我们很容易直观地想到以下两种做法:
1 /* 2 * 用宏 3 */ 4 #define input 0 5 #define output 1 6 7 /* 8 * 用常变量 9 */ 10 const input 0 11 const output 1
这样的做法可行,但是有缺点,那就是没有体现出同一类状态变量的描述宏/值之间的关联性。而枚举类型则很好的解决了这个问题。
枚举类型怎么用?
首先看一个枚举定义的示例:
1 enum Fruit { 2 apple, 3 orange, 4 pear, 5 };
这个例子定义了一个名为Fruit的枚举类型,它包含三个描述值 - apple,orange,pear。其中第一个值(apple)默认等价于0,第二个(orange)1,依此类推。
这几个描述值可以像一般的常量表达式般使用,请看下面示例:
1 #include <iostream> 2 3 using namespace std; 4 5 enum Fruit { 6 apple, 7 orange, 8 pear, 9 }; 10 11 int main() 12 { 13 cout << "apple: " << apple << endl; 14 cout << "orange: " << orange << endl; 15 cout << "pear: " << pear << endl; 16 17 return 0; 18 }
运行结果:
但枚举真正的用途是为一种状态变量提供一组相关联的描述值,参考以下代码:
#include <iostream>using namespace std;enum Fruit {apple,orange,pear, };int main() {/** 定义枚举变量jacklike和mikelike*/Fruit jacklike;Fruit mikelike;/** 将指定状态值赋给枚举变量*/jacklike=apple; mikelike=orange;/** 程序根据枚举变量的状态值作出不同处理*/if (jacklike == apple) { cout << "Jack like apple" << endl;}if (mikelike == apple) {cout << "Mike like apple." << endl;}return 0; }
小结
必须要在具体编程中多多尝试使用枚举,才能真正掌握枚举。同时一些关于枚举的语法细则我没有列出,想全面了解请查阅相关C++教材。
转载于:https://www.cnblogs.com/muchen/p/6134462.html
第一篇:容易遗忘的“枚举”相关推荐
- ios 获取一个枚举的所有值_凯哥带你从零学大数据系列之Java篇---第十一章:枚举...
温馨提示:如果想学扎实,一定要从头开始看凯哥的一系列文章(凯哥带你从零学大数据系列),千万不要从中间的某个部分开始看,知识前后是有很大关联,否则学习效果会打折扣. 系列文章第一篇是拥抱大数据:凯哥带你 ...
- FPGA通信第一篇--USB2.0
FPGA通信第一篇–USB2.0 1 初识USB 1.1 简介 USB(UniversalSerialBus)是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据.在USB1.0和USB1.1 ...
- JAVA导出Excel通用工具类——第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选、动态合并横向(纵向)单元格等多种复杂情况——保姆级别,真的不能再详细了,代码拿来即用)
JAVA导出Excel通用工具--第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选.动态合并横向(纵向)单元格等多种复杂情况--保姆级别,真的不能再详细了,封装通用工具类,代码拿 ...
- 4. 写第一篇博客,最好的时间是今日,今时,今刻
橡皮擦,一个逗趣的互联网高级网虫,为你带来新职场故事,搬来程序员敲门砖. 已完成文章 国内,首套,成体系,技术博客写作专栏发布啦 技术博客只能写技术文章吗?当然是由我们自己来定义. 为"她& ...
- 聊聊后端程序员的知识体系-第一篇
聊聊后端程序员的知识体系-第一篇 原文链接:https://www.fpthinker.com/backend_knowledge_architecture/knowledge.htmll 亲爱的读者 ...
- 【短临预报系列第一篇】Convolutional LSTM Network: A Machine LearningApproach for Precipitation Nowcasting
前言: 这是我研究短临预报看的第一篇文章,施行健博士所写,他提出的ConvLSTM模型从2015年到现在还有人使用,引用量达到了5000+,可以说是开山之作. 文章地址:https://arxiv.o ...
- 成就小我,从第一篇博客开始
自我介绍 你们好,这是我的第一篇博客,一起见证一个菜鸟的成长吧.作为一名物联网专业的大二学生,即将面临大三找实习的压力,前路的未知更让我感到压抑.之前一直想写博客,但由于时间关系,或是更多由于自己的惰 ...
- 3、SpringBoot解密第一篇
SpringBoot解密第一篇 一.感受SpringBoot Starter 1.SpringBoot特性的优点有哪些? 引用官方: Spring Boot makes it easy to crea ...
- [新手必备]Unity推箱子小游戏C#代码详解(第一篇-代码部分)
完整项目请参考博客:https://blog.csdn.net/qq_41676090/article/details/96300302 本文为推箱子小游戏C#代码详解第一篇的代码部分,主要讲解 Sy ...
- 一起实现RPC,超详细~~~ 第一篇
一起实现RPC,超详细!!! 第一篇 一个简单的RPC通信逻辑如下: 服务端暴露其要提供服务的接口 客户端通过动态代理调用服务端的接口方法,通过代理将要传输的信息发送到服务端(代理是为了让客户端不去关 ...
最新文章
- hdu 4722(记忆化搜索)
- Java7 java.util.concurrent 并发包计划
- yunyang tensorfow-yolo3 训练时权重文件消失的原因和解决办法(max_to_keep)
- SourceTree安装破姐添加SSH KEY以及拉取代码教程(附资源下载)
- python手写均值滤波器_python手写均值滤波
- 观察性研究的网络Meta分析
- python dictionary的遍历
- 修改SqlServer的登录密码
- 关于Jquery中animate可以操作css样式属性总结
- java compiler.run_eclipse build path与java Compiler
- Oracle使用技巧及PL/SQL Developer配置
- windows 控制台提示:请求的操作需要提升
- Error while obtaining start requests
- 旅行青蛙服务器维护时间,旅行青蛙怎么调节时间 旅行青蛙修改时间攻略
- nn.Sequential()
- arcgis 做凹凸起伏的分类图
- 判断全角与半角及两者之间的转换
- java web ip_详解Java Web如何限制访问的IP的两种方法
- linux移动硬盘直接拔掉,安全弹出后就拔掉移动硬盘,真的安全吗?
- Web安全之CTF测试赛