C 枚举类型用途及定义详解
创始人
2024-06-22 09:30:22
0

C++编程语言作为一种功能强大的语言,对开发人员来说作用是非常大的。不过,其中有很多应用方式还需要我们去不断的探讨,不断从中汲取经验来达到熟练的程度。下面我们就先为大家详细介绍一下有关C++枚举类型的相关概念。

1、枚举enum的用途浅例

写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rainy等等。更常见的,打开一个文件可能有三种状态:input, output和append. 典型做法是,对应定义3个常数,即:

  1. const int input = 1;  
  2. const int output = 2;  
  3. const int append = 3; 

然后,调用以下函数:

  1. bool open_file(string file_name, int open_mode); 

比如,

  1. open_file("Phenix_and_the_Crane", append); 

这种做法比较简单,但存在许多缺点,主要的一点就是无法限制传递给open_file函数的第2个参数的取值范围,只要传递int类型的值都是合法的。(当然,这样的情况下的应对措施就是在open_file函数内部判断第二个参数的取值,只有在1,2,3范围内才处理。)

使用枚举能在一定程度上减轻这种尴尬(注1),它不但能实现类似于之前定义三个常量的功能,还能够将这三个值组合起来成为***的组。例如:

  1. enum open_modes {input = 1, output, append}; 

以上定义了open_modes为C++枚举类型enumeration type。每一个命名了的枚举都是唯一的类型,是一个类型标示器type specifier。例如,我们可以重新写一个open_file函数:

  1. bool open_file(string file_name, open_modes om); 

在open_modes枚举中,input, output, append称为枚举子enumerator, 它们限定了open_modes定义的对象的取值范围。这个时候,调用open_file函数和之前的方法还是一模一样:

  1. open_file("Phenix_and_the_Crane", append); 

但是,如果传递给open_file的第二个参数不是open_modes枚举类型值的话(注1),那么编译器就会识别出错误;就算该参数取值等价于input, output, append中的某个,
也一样会出错哦!例如:

  1. open_file("Phenix_and_the_Crane", 1); 

2、C++枚举类型的定义

一个枚举是一个类型,可以保存一组由用户刻画的值。定义之类,枚举的使用很像一个整数类型。枚举的定义具有以下形式,即以关键词enum开头,接着一个可选的枚举名,下来是由大括号{}包含着一个由逗号分隔的枚举子列表enumerators list:

  1. enum [enumeration name] {enumerator1[=value1], 
    enumerator2[=value2], ...}; 

【编辑推荐】

  1. C++继承基础概念详解
  2. C++逗号操作符应用方法详解
  3. C++内联函数不宜使用情况介绍
  4. C++ inline函数正确应用方法介绍
  5. C++ new用法相关经验总结

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...