`
xinklabi
  • 浏览: 1560777 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

C++枚举类型用途及定义详解

阅读更多

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], ...}; 
  2. 如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始, 顺   次赋给标识符0, 1, 2, ...。但当枚举中的某个成员赋值后, 其后的成员按依次   加1的规则确定其值。   例如下列枚举说明后, x1, x2, x3, x4的值分别为0, 1, 2, 3。
  3. enum string{x1, x2, x3, x4}x;   当定义改变成:   enum string   {   x1,   x2=0,   x3=50,   x4,   }x;   则x1=0, x2=0, x3=50, x4=51   注意:   1. 枚举中每个成员(标识符)结束符是",", 不是";", 最后一个成员可省略   ","。   2. 初始化时可以赋负数, 以后的标识符仍依次加1。   3. 枚举变量只能取枚举说明结构中的某个标识符常量。   例如:   enum string   {   x1=5,   x2,   x3,   x4,   };   enum strig x=x3;   此时, 枚举变量x实际上是7。   enum 关键字在c中用的是比较多的,它常用来定义标记整型常量,你去看许多操作系统的源代码,
  4. 都有用这个关键字来一次定义许多标记整型常量,其实它相当于定义一个整型常量的表,考试.大提示方
  5. 便应用时查找。当然他的大部分功能都可以被宏定义代替,不过毕竟enum关键字定义的东东是支持类
  6. 型检查的,可以用编译器来发现一些错误(enum定义的只能是整型的常量表) <!--分页-->
分享到:
评论

相关推荐

    详解C++11强类型枚举

    枚举类型是C/C++中用户自定义的构造类型,它是由用户定义的若干枚举常量的集合。枚举值对应整型数值,默认从0开始。比如定义一个描述性别的枚举类型。 enum Gender{Male,Female}; 其中枚举值Male被编译器默认赋值为...

    深入理解C++11:C++11新特性解析与应用

    1555.1 强类型枚举 1555.1.1 枚举:分门别类与数值的名字 1555.1.2 有缺陷的枚举类型 1565.1.3 强类型枚举以及C++11对原有枚举类型的扩展 1605.2 堆内存管理:智能指针与垃圾回收 1635.2.1 显式内存管理 1635.2.2 ...

    C++模板之特化与偏特化详解

    我们都知道,强类型的程序设计迫使我们为逻辑结构相同而具体数据类型不同的对象编写模式一致的代码,而无法抽取其中的共性,这样显然不利于程序的扩充和维护。C++模板就应运而生。C++的模板提供了对逻辑结构相同的

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    2.2.7 枚举类型 44 2.2.8 条件操作符 44 2.3 循环 45 2.3.1 while和do-while语句 45 2.3.2 再谈增量、减量操作符 47 2.3.3 逗号操作符 49 2.3.4 for语句 50 2.3.5 break与continue语句 55 2.3.6 嵌套循环 ...

    C++如何实现广义表详解

    由上图我们可以看到,广义表的节点类型无非head、value、sub三种,这里设置枚举类型,利用枚举变量来记录每个节点的类型: enum Type { HEAD, //头节点 VALUE, //值节点 SUB, //子表节点 }; 每个节点都有自己的...

    windows驱动开发技术详解-part2

     第3章 Windows驱动编译环境配置、安装及调试  本章将带领读者一步步对驱动程序进行编译、安装和简单的调试工作。这些步骤虽然简单,但往往困 惑着初次接触驱动程序的开发者。  3.1 用C语言还是用C++语言  ...

    Windows驱动开发技术详解的光盘-part1

     第3章 Windows驱动编译环境配置、安装及调试  本章将带领读者一步步对驱动程序进行编译、安装和简单的调试工作。这些步骤虽然简单,但往往困惑着初次接触驱动程序的开发者。  3.1 用C语言还是用C++语言  ...

    asp.net知识库

    利用自定义属性,定义枚举值的详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试...

Global site tag (gtag.js) - Google Analytics