`
xinklabi
  • 浏览: 1591790 次
  • 性别: 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强类型枚举

    (1)强作用域,强类型枚举成员的名称不会被输出到其父作用域,所以不同枚举类型定义同名枚举成员编译不会报重定义错误。 (2)转换限制,强类型枚举成员的值不可以与整型发生隐式相互转换。 (3)可以指定底层...

    C++ 数据类型详解

    在C++中,数据类型分为基本数据类型、枚举类型、结构体和联合体,以及C++特有的类等。下面我们将详细探讨C++中的基本数据类型。 首先,C++的基本数据类型包括布尔型、整型、字符型、浮点型以及宽字符型: 1. 布尔...

    枚举大小sizeof 中枚举的大小详解.docx

    在C++中,枚举类型是一种用户自定义的类型,它可以由开发者定义出不同的枚举值。例如, enums EType1 { e1 = CHAR_MAX };enum EType2 { e2 = SHRT_MAX };enum EType3 { e3 = INT_MAX };这些枚举类型的大小是多少呢?...

    C++经典面试试题及答案详解

    - **数据类型**:C++中的基本数据类型(如int、char、float等)、自定义数据类型(如struct和class)以及枚举(enum)的使用。 - **运算符**:包括算术运算符、比较运算符、逻辑运算符、赋值运算符、位运算符等,...

    枚举大小sizeof 中枚举的大小详解.pdf

    在某些特定上下文中,如枚举类型具有特定的语义或用途时,直接用`int`替换枚举可能会导致代码难以理解或引发错误。因此,应谨慎使用这种转换,并尽可能保持类型的一致性。 总之,枚举在C++中提供了定义和管理一组...

    枚举大小sizeof中枚举的大小详解.pdf

    枚举在C++中分为两类:枚举类型(enum class)和旧式枚举(enum)。本篇主要探讨的是旧式枚举,因为它在早期的C++版本中广泛使用,并且在某些场景下仍然存在。 1. 枚举的类型: 在C++中,枚举实际上是一种整型的...

    c++出错提示中英文对照详解

    在C++中,枚举类型需要正确的语法格式,否则编译器将报告错误。 31. Enumeration constant syntax error 枚举常数语法错误 在C++中,枚举常数需要正确的语法格式,否则编译器将报告错误。 32. Error directive :...

    枚举大小sizeof中枚举的大小详解.docx

    - 枚举类型的大小并不总是等于定义它的基础类型。在示例中,`Enum1`、`Enum2`和`Enum3`分别可能占用1个、2个和4个字节,这取决于枚举值的实际大小以及编译器如何对齐内存。 3. **隐式类型转换**: - C++中,枚举...

    C++语言命令详解

    C++语言提供了丰富的数据类型,包括基本类型如整型、浮点型、字符型等,以及由基本类型组合而成的复合类型,如数组、结构体、联合体和枚举等。同时还有引用类型和指针类型,它们用于实现更复杂的数据结构和功能。 2...

    C++编程实例详解:普通程序员参考书

    10. **C++11及更高版本的新特性**:随着C++标准的更新,许多新特性如lambda表达式、右值引用、auto关键字、强类型枚举等被引入。书籍可能会涵盖这些现代C++特性,以帮助读者跟上最新的编程实践。 通过对以上知识点...

    章枚举类型和位运算PPT学习教案.pptx

    枚举类型定义完成后,需要创建枚举变量才能使用。这可以通过先定义类型再定义变量,或者在定义类型的同时定义变量来实现,如下所示: ```cpp // 先定义类型,再定义变量 enum weekday {Sun, Mon, Tue, Wed, Thu, Fri...

    C++编程实例详解

    10. **C++11及以后的更新**:C++语言不断演进,C++11引入了许多新特性,如右值引用、Lambda表达式、auto关键字、强类型枚举等,C++14和C++17继续增强和完善了这些功能。 通过《C++编程实例详解》中的实例,学习者将...

    中国地质大学c++试题

    - 枚举类型在C++中用于定义一组命名的整数常量。题目中的`enum Number{one=1, two=2, four=4, eight=8};`定义了一个名为`Number`的枚举类型,其中包含了四个成员:`one`, `two`, `four`, 和 `eight`,它们分别等于1...

    C++11 并发指南五(stdcondition_variable 详解).docx

    std::cv_status 是一个枚举类型,用于表示-condition_variable 的状态。它有两个值:std::cv_status::no_timeout 和 std::cv_status::timeout,分别表示等待超时和非超时。 std::notify_all_at_thread_exit() 是一...

    C++专有名词定义

    ### C++专有名词定义详解 #### 一、C++基础名词定义概览 本文将对C++中113个专有名词进行详细的定义解释,适合初学者阅读,旨在帮助那些对C++专有名词定义不熟悉的学习者快速理解和掌握。 #### 二、重要名词详解 ...

Global site tag (gtag.js) - Google Analytics