首页 > 编程 > C++ > 正文

C++教程:什么是枚举类型

2020-05-23 14:27:05
字体:
来源:转载
供稿:网友
在基本的数据类型中,无外乎就是些数字和字符。但是某些事物是较难用数字和字符来准确地表示的。比如一周有七天,分别是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变量,则会发生错误。虽然枚举类型的实质是整数,但是电脑还是会仔细检查数据类型,禁止不同数据类型的数据互相赋值。另外,在一般情况下,枚举类型是不能进行算术运算的。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表