枚举类型

转载 2007年09月29日 19:49:00

我们常常需要一些整型常量表示某一个的数据范围。例如,假定需要表示汽车的颜色:
  const int cRED = 0;
  const int cBLUE = 1;
  …
  int auto_colour;
  auto_colour = cBLUE;
  上面的程序语句是用整型变量auto_colour表示颜色,下面的语句也是合法的:
  auto_colour = -1;
  …
  显然,-1并不是所需要的颜色值。如果能够限定auto_colour在限定的整数范围(即规定的几种颜色集合)内取值就比较好,C++中的枚举类型能够让我们做到这一点。枚举类型是一种用户定义的数据类型,其一般定义形式为:
  enum 枚举类型名
  {
   标识符[=整型常数],
   标识符[=整型常数],
   ...
   标识符[=整型常数],
  };
  "枚举类型名"右边花括号中的内容称之为枚举表,枚举表中的每一项称之为枚举成员,枚举成员是常量,也就是说,枚举表是整型常量的集合。枚举成员之间用逗号隔开,方括号中的"整型常数"是枚举成员的初值。
  如果不给枚举成员赋初值,即省掉了标识符后的"=整型常数"时,则编译器为每一个枚举成员给一个不同的整型值,第一个成员为0,第二个为1,等等。当枚举类型中的某个成员赋值后,其后的成员则按依次加1的规则确定其值。下面是一个枚举类型定义实例:
  enum Colour { eRED, eBLUE, eYELLOW, eGREEN,
  eSILVERGREY,eBURGUNDY };
  这样就定义了一个称之为Colour的枚举类型,编译器给枚举成员eRED,…,eBURGUNDY的值分别为0,…,5。 定义了枚举类型,就可以定义枚举类型的变量,其值限定为某一个枚举成员。例如:
  Colour auto_colour;
  …
  auto_colour = eBURGUNDY;
  Colour类型变量auto_colour只能取eRED,…,eBURGUNDY六个值中的一个,下面的语句将会出现编译错误:
  auto_colour = 4;
  我们也可以在定义枚举类型时,为枚举成员指定初值,例如:
  enum Colour { eRED=5, eBLUE, eYELLOW, Egreen=30,
  Esilvergrey=40,eBURGUNDY };
  这时,eBLUE=6、Eyellow=7、Eburgundy=41。

 如果一个变量只有几种可能的值,就可以把它定义为枚举类型。"枚举",顾名思义,就是把这种类型数据可取的值一一列举出来。
  例如,可以定义一个表示日期的枚举类型weekday:
  enum weekday{sun,mon,tru,wed,thu,fri,sat};
  这里enum是关键字,用于定义枚举数据类型,weekday是枚举类型的名字,枚举元素用标识符表示。
  接下来我们可以用weekday来定义变量,例如:
  weekday today,nextday;
  C++语言也允许在定义枚举类型的同时定义枚举变量,例如:
  enum weekday{sun,mon,tru,wed,thu,fri,sat}today,nextday;
  这样,变量today和nextday就具有weekday类型,它们的取值只能是sun,mon,…,sta,例如可有:
  today = sun;
  nextday = mon;
  if(today == sat)
  nextday = sun //如果today是sat的话,那么nextday赋值为sun
  C++编译器对枚举元素实际上是按整型常数处理。所以,就象前面所说的那样,当遇到枚举元素列表时,编译程序就把其中第一个标识符赋0值,第二、三、…个标识符依次赋1、2、…。因此,当枚举元素赋给枚举变量时,该变量实际得到一个整数值。例如:
  today = sun;
  是将0赋给today,而不是将字符串"sun"赋给today。赋值后:
  cout<<today;
  语句的输出结果是0。
  我们也可以在枚举类型定义时指定枚举元素的值,例如:
  enum weekday{sun = 7,mon = 1,tue,wed,thu,fri,sat};
  这时sun的值是7,mon的值是1,而tue以后各元素的值,从mon的值开始,每次递增1,即tue的值为2,wed的值为3,…。如果不写mon = 1,则mon的值为8,tue的值为9,依此类推。
  由于枚举元素是常量,所以我们在程序中不能对它们进行赋值,如"sun = 0;mon = 1;"将产生错误。
  既然枚举元素就是整型值,那么它有什么存在的必要呢?至少有两个原因:一个是用标识符表示数值增加了程序的可读性,例如:
  if(today == sat)
  next = sun
  就比
  if(today == 6)
  nextday = 0;
  清楚多了;另一个重要的原因是:它限制了变量取值的范围,如现在today只能取sun~sat中的值。
  注意:enum在 C++和C中使用的不同。下面的C语言语句定义了名为day的变量:
  enum Days { Monday, Tuesday, Wednesday, Thursday, Friday };
  enum Days day;
  在C++中,定义为:
  enum Days { Monday, Tuesday, Wednesday, Thursday, Friday };
  Days day;
  C++中定义了枚举类型数据后,程序可以把它当作一种类型使用,不需在类型名Days前加enum关键字。
  

C/C++中枚举类型(enum)的使用解惑

作者:hqlong 日期:2007-05-30  枚举类型,顾名思义,“枚”作为量词,作“个”讲,那么枚举,就是一个一个的列举,如果一件事情能够被一个一个的列举,那么它的数量肯定就是有限的,否则是不能...
  • yiyunoo
  • yiyunoo
  • 2008年05月11日 15:45
  • 14823

C++之枚举类型的作用

枚举类型是一种用户定义的类型,常用yu
  • letsgowei
  • letsgowei
  • 2014年05月27日 01:25
  • 1232

SQL中枚举类型列

如果想定义一个列数据是{v     ,h   ,       t     ,   u     }的枚举类型 可以:create   table   表   (你的列   char(1)   check...
  • westnewhountfox
  • westnewhountfox
  • 2008年04月15日 10:37
  • 223

深入理解枚举类型之基础用法

参考资料       1.Java编程思想        2.JAVA EMNU        3.java enum(枚举)使用详解 + 总结...
  • IO_Field
  • IO_Field
  • 2016年05月16日 21:19
  • 1915

枚举类型的声明

枚举是一种数据类型,而不是一种构造类型,应为它
  • leafinsnowfield
  • leafinsnowfield
  • 2014年11月18日 00:34
  • 706

枚举类型Enum的含义分析

枚举类型是一种基本数据类型而不是构造数据类型,从jdk1.5才有的新类型,一般用来做全局常量。 特性: 1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例,可用...
  • pengkv
  • pengkv
  • 2015年03月11日 15:16
  • 1775

Mybatis处理枚举类型

1、枚举package com.ahut.core.enums;import java.util.HashMap; import java.util.Map;/** * * @ClassName...
  • qq_28988969
  • qq_28988969
  • 2017年11月22日 17:03
  • 156

MYSQL数据库中的枚举类型和集合类型

枚举类型,enum 一般来说就是单选,在定义枚举的时候列出所有的可能性; 代码如下 create table type_enum( gender enum('male','remale','s...
  • woshinannan741
  • woshinannan741
  • 2016年01月14日 18:13
  • 8174

结构体类型与枚举类型

枚举类型 枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。 例如,假设您必须定义一个变量,该变量的值表示一周中的一天。 该变量只能存储七个有意义的值。  若要定...
  • shashawoyao
  • shashawoyao
  • 2013年08月08日 10:01
  • 907

sizeof枚举类型大小详解

至从C语言开始enum类型就被作为用户自定义分类有限集合常量的方法被引入到了语言当中,而且一度成为C++中定义编译期常量的唯一方法(后来在类中引入了静态整型常量)。 根据上面对enum类型的描述,有以...
  • u012942555
  • u012942555
  • 2015年09月21日 19:38
  • 891
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:枚举类型
举报原因:
原因补充:

(最多只允许输入30个字)