C++语言程序设计

如果一个变量只有几种可能的值，就可以把它定义为枚举类型。"枚举"，顾名思义，就是把这种类型数据可取的值一一列举出来。
例如，可以定义一个表示日期的枚举类型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关键字。