枚举类型enum(C++语言)

Posted on 2019-09-14 16:23  惜花时  阅读(1768)  评论(1编辑  收藏  举报

一、关于enum

在实际问题中,有些变量的取值被限定在一个有限的范围内。比如一场比赛的结果只有胜、负、平局、比赛取消4种情况;一个袋子里只有红、黄、蓝、白、黑5种颜色的球;一个星期只有星期一、星期二、……、星期日7天。上述的数据只有有限的几种可能值,虽可以用int、char等类型来表示它们,但对数据合法性的检查却是一件很麻烦的事情。C++中的枚举类型专门用来解决这些问题。

  • 枚举类型的声明形式如下:

    enum 枚举类型名 {变量值列表};

  • 例如:

    enum Weekday {SUN,MON,TUE,WED,THU,FRI,SAT};

【注】枚举类型是一种基本数据类型,而不是一种构造类型

  • 枚举变量的说明

    设有变量a,b,c被说明为上述的Weekday,可采用下述任一种方式:
    enum Weekday {MON,TUE,WED,THU,FRI,SAT};
    enum a,b,c;
    或者
    enum Weekday {MON,TUE,WED,THU,FRI,SAT}a,b,c;
    或者
    enum {MON,TUE,WED,THU,FRI,SAT}a,b,c;


二、枚举类型的应用说明

  • 枚举元素按常量处理,不能对其赋值。例如:
SUN=0;     //SUN是枚举元素,此语句非法  
  • 枚举元素具有默认值,依次从0开始。例如,SUN的值为0,MON的值为1……SAT的值为6。

  • 可以在声明时对其赋值,则后续变量依次加一。如

    enum Weekday {SUN,MON=4,TUE,WED,THU,FRI,SAT}; //其中MON=4,则TUE为5,WED为6……

  • 不能将非枚举量赋值给枚举量,但是可以将枚举量赋值给非枚举量。如:

    int a =MON;

  • 在不进行强制转换的前提下,只能将定义的枚举量赋值给该种枚举的变量。例如:

    Weekday = MON;或者Weekday = SUN;不能将其他值赋值给枚举变量,
    如:Weekday = 10。


三、枚举的运算

  • 不能对其进行算数运算

    Weekday++;Weekday=MON+TUESDAY;
    这类操作是非法的,因为可能导致违反类型限制。
    比如:Weekday=SUN;Weekday++;
    Weekday首先被赋值SUN(SUN为6),再递增的话,Weekday递增到7,而7是无效的。

  • 能参与其他类型变量的运算

    int a;
    a = 1 + MON;
    //这是允许的,因为编译器会自动将枚举量转换为int类型。


四、枚举类型的应用

枚举数据类型的目的之一是符号名称有助于使程序自我解释。但是,由于这些名称不 是字符串,它们仅在程序中使用。

因为枚举数据类型的符号名称与整数值相关联,所以它们可以在 switch 语句中使用,如下面的程序所示,该程序还演示了可以使用枚举的数据类型,而不实际创建该类型的任何变量。

#include <iostream>
using namespace std;

enum Roster{Tom = 1,Sharon,Bill,Teresa,John};

int main()
{
	int who;
	cin>>who;
	switch(who)
	{
	case Tom:
		cout<<"Tom's birthday is Junuary 3\n";
		break;
	case Sharon:
		cout<<"Sharon's birthday is April 22\n";
		break;
	case Bill:
		cout<<"Bill's birthday is December 19\n";
		break;
	case Teresa:
		cout<<"Teresa's birthday is February 2\n";
		break;
	case John:
		cout<<"John's birthday is June 17\n";
		break;
	default:
		cout<<"Invalid selection\n";
	}
	return 0;
}