枚举类型

转载 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关键字。
  

相关文章推荐

mybatis入门实战之枚举类型

  • 2017年08月22日 01:32
  • 21KB
  • 下载

枚举类型的使用

  • 2013年06月20日 13:10
  • 348KB
  • 下载

枚举类型Enum的含义分析

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

5-枚举类型、输入输出、处理

  • 2013年07月16日 15:58
  • 14KB
  • 下载

java枚举类型enum的使用

  • 2014年07月23日 13:57
  • 6KB
  • 下载

Android enum(枚举类型)使用详解

原始的接口定义常量: public interface IConstants { String MON = "Mon"; String TUE = "Tue"; Stri...

枚举类型应用小Demo

  • 2013年06月10日 22:54
  • 65KB
  • 下载

iOS 中的宏定义,常量,与枚举类型使用

开发过程中的经常需要使用一些全局的常量,便于方法之间的参数传递和类型确定等,经常使用到的有宏定义,const常量以及枚举等,我们经常使用宏定义来进行全局常量的定义,但是是不是所有的全局常量宏定义都是最...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:枚举类型
举报原因:
原因补充:

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