前言

在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

第一篇:容易遗忘的“枚举”相关推荐

  1. ios 获取一个枚举的所有值_凯哥带你从零学大数据系列之Java篇---第十一章:枚举...

    温馨提示:如果想学扎实,一定要从头开始看凯哥的一系列文章(凯哥带你从零学大数据系列),千万不要从中间的某个部分开始看,知识前后是有很大关联,否则学习效果会打折扣. 系列文章第一篇是拥抱大数据:凯哥带你 ...

  2. FPGA通信第一篇--USB2.0

    FPGA通信第一篇–USB2.0 1 初识USB 1.1 简介 USB(UniversalSerialBus)是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据.在USB1.0和USB1.1 ...

  3. JAVA导出Excel通用工具类——第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选、动态合并横向(纵向)单元格等多种复杂情况——保姆级别,真的不能再详细了,代码拿来即用)

    JAVA导出Excel通用工具--第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选.动态合并横向(纵向)单元格等多种复杂情况--保姆级别,真的不能再详细了,封装通用工具类,代码拿 ...

  4. 4. 写第一篇博客,最好的时间是今日,今时,今刻

    橡皮擦,一个逗趣的互联网高级网虫,为你带来新职场故事,搬来程序员敲门砖. 已完成文章 国内,首套,成体系,技术博客写作专栏发布啦 技术博客只能写技术文章吗?当然是由我们自己来定义. 为"她& ...

  5. 聊聊后端程序员的知识体系-第一篇

    聊聊后端程序员的知识体系-第一篇 原文链接:https://www.fpthinker.com/backend_knowledge_architecture/knowledge.htmll 亲爱的读者 ...

  6. 【短临预报系列第一篇】Convolutional LSTM Network: A Machine LearningApproach for Precipitation Nowcasting

    前言: 这是我研究短临预报看的第一篇文章,施行健博士所写,他提出的ConvLSTM模型从2015年到现在还有人使用,引用量达到了5000+,可以说是开山之作. 文章地址:https://arxiv.o ...

  7. 成就小我,从第一篇博客开始

    自我介绍 你们好,这是我的第一篇博客,一起见证一个菜鸟的成长吧.作为一名物联网专业的大二学生,即将面临大三找实习的压力,前路的未知更让我感到压抑.之前一直想写博客,但由于时间关系,或是更多由于自己的惰 ...

  8. 3、SpringBoot解密第一篇

    SpringBoot解密第一篇 一.感受SpringBoot Starter 1.SpringBoot特性的优点有哪些? 引用官方: Spring Boot makes it easy to crea ...

  9. [新手必备]Unity推箱子小游戏C#代码详解(第一篇-代码部分)

    完整项目请参考博客:https://blog.csdn.net/qq_41676090/article/details/96300302 本文为推箱子小游戏C#代码详解第一篇的代码部分,主要讲解 Sy ...

  10. 一起实现RPC,超详细~~~ 第一篇

    一起实现RPC,超详细!!! 第一篇 一个简单的RPC通信逻辑如下: 服务端暴露其要提供服务的接口 客户端通过动态代理调用服务端的接口方法,通过代理将要传输的信息发送到服务端(代理是为了让客户端不去关 ...

最新文章

  1. hdu 4722(记忆化搜索)
  2. Java7 java.util.concurrent 并发包计划
  3. yunyang tensorfow-yolo3 训练时权重文件消失的原因和解决办法(max_to_keep)
  4. SourceTree安装破姐添加SSH KEY以及拉取代码教程(附资源下载)
  5. python手写均值滤波器_python手写均值滤波
  6. 观察性研究的网络Meta分析
  7. python dictionary的遍历
  8. 修改SqlServer的登录密码
  9. 关于Jquery中animate可以操作css样式属性总结
  10. java compiler.run_eclipse build path与java Compiler
  11. Oracle使用技巧及PL/SQL Developer配置
  12. windows 控制台提示:请求的操作需要提升
  13. Error while obtaining start requests
  14. 旅行青蛙服务器维护时间,旅行青蛙怎么调节时间 旅行青蛙修改时间攻略
  15. nn.Sequential()
  16. arcgis 做凹凸起伏的分类图
  17. 判断全角与半角及两者之间的转换
  18. java web ip_详解Java Web如何限制访问的IP的两种方法
  19. linux移动硬盘直接拔掉,安全弹出后就拔掉移动硬盘,真的安全吗?
  20. Web安全之CTF测试赛

热门文章

  1. 验毛坯房要注意什么?
  2. AFNetworking请求提示Invalid parameter not satisfying: URLString
  3. [Link]NoSQL
  4. Ubuntu 源码方式安装Subversion
  5. 性能测试之性能监控技术
  6. java WebService 异常
  7. 小括号教学设计导入_人教版一年级数学下教案 《小括号》教案
  8. 黑龙江2021年高考成绩查询分数,2021年黑龙江高考成绩什么时候公布
  9. java比赛_javamq
  10. Linux用户和用户组和文件权限介绍