在基本的数据类型中,无外乎就是些数字和字符。但是某些事物是较难用数字和字符来准确地表示的。比如一周有七天,分别是Sunday、Monday、Tuesday、Wednesday、Thursday、Friday和Saturday。如果我们用整数0、1、2、3、4、5、6来表示这七天,那么多下来的那些整数该怎么办?而且这样的设置很容易让数据出错,即取值超出范围。我们能否自创一个数据类型,而数据的取值范围就是这七天呢?
C++中有一种数据类型称为枚举(Enumeration)类型,它允许用户自己来定义一种数据类型,并且列出该数据类型的取值范围。
我们说变量就好像是一个箱子,而数据类型就好像是箱子的类型,所以我们在创建某个枚举类型的变量的时候,必须先把这个枚举类型设计好,即把箱子的类型设计好。定义枚举类型的语法格式为:
enum 类型名{常量1[,常量2,……常量n]};
定义枚举类型的位置应该在程序首次使用该类型名之前,否则程序无法识别该类型。枚举类型中我们列出的常量称为枚举常量。它并不是字符串也不是数值,而只是一些符号。
如果我们要定义一周七天的日期类型,可以这样写:
enum day{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
这时候,程序中就有了一种新的数据类型——day,它的取值范围就是Sunday到Saturday的那七天。我们已经把类型设计好,下面我们就能来创建一个day类型的变量了:
day today;
today=Sunday;
这样,day类型的变量today的值就是Tuesday了。
下面我们来写一段程序来运用一下枚举类型的数据:(程序9.1)
#include "iostream.h"
enum day{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
void nextday(day &D);//向后一天是星期几,参数为day类型,是程序中首次使用该类型名
void display(day D);//显示某一天是星期几
int main()
{
day today=Sunday;
for (int i=0;i<7;i++)
{
cout <<"Data in today=" <<today <<endl;
display(today);
nextday(today);
}
return 0;
}
void nextday(day &D)
{
switch(D)
{
case Sunday:
D=Monday;
break;
case Monday:
D=Tuesday;
break;
case Tuesday:
D=Wednesday;
break;
case Wednesday:
D=Thursday;
break;
case Thursday:
D=Friday;
break;
case Friday:
D=Saturday;
break;
case Saturday:
D=Sunday;
break;
}
}
void display(day D)
{
switch(D)
{
case Sunday:
cout <<"Sunday" <<endl;
break;
case Monday:
cout <<"Monday" <<endl;
break;
case Tuesday:
cout <<"Tuesday" <<endl;
break;
case Wednesday:
cout <<"Wednesday" <<endl;
break;
case Thursday:
cout <<"Thursday" <<endl;
break;
case Friday:
cout <<"Friday" <<endl;
break;
case Saturday:
cout <<"Saturday" <<endl;
break;
}
}
运行结果:
Data in today=0
Sunday
Data in today=1
Monday
Data in today=2
Tuesday
Data in today=3
Wednesday
Data in today=4
Thursday
Data in today=5
Friday
Data in today=6
Saturday
根据运行结果,我们发现在day型变量today中保存的竟然是整数!也就是说,一个整数和一个枚举常量一一对应了起来,要注意是一一对应,而不是相等。但是如果我们把整数直接赋值给today变量,则会发生错误。虽然枚举类型的实质是整数,但是电脑还是会仔细检查数据类型,禁止不同数据类型的数据互相赋值。另外,在一般情况下,枚举类型是不能进行算术运算的。