分享
 
 
 

枚举类型的定义

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在程序设计中,有时会用到由若干个有限数据元素组成的集合,如一周内的星期一到星期日七个数据元素组成的集合,由三种颜色红、黄、绿组成的集合,一个工作班组内十个职工组成的集合等等,程序中某个变量取值仅限于集合中的元素。此时,可将这些数据集合定义为枚举类型。因此,枚举类型是某类数据可能取值的集合,如一周内星期可能取值的集合为:

{ Sun,Mon,Tue,Wed,Thu,Fri,Sat}

该集合可定义为描述星期的枚举类型,该枚举类型共有七个元素,因而用枚举类型定义的枚举变量只能取集合中的某一元素值。由于枚举类型是导出数据类型,因此,必须先定义枚举类型,然后再用枚举类型定义枚举型变量。

enum <枚举类型名>

{ <枚举元素表> };

其中:关键词enum表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。例如:

enum weekdays

{ Sun,Mon,Tue,Wed,Thu,Fri,Sat };

定义了一个名为 weekdays的枚举类型,它包含七个元素:Sun、Mon、Tue、Wed、Thu、Fri、Sat。在编译器编译程序时,给枚举类型中的每一个元素指定一个整型常量值(也称为序号值)。若枚举类型定义中没有指定元素的整型常量值,则整型常量值从0开始依次递增,因此,weekdays枚举类型的七个元素Sun、Mon、Tue、Wed、Thu、Fri、Sat对应的整型常量值分别为0、1、2、3、4、5、6。

注意:在定义枚举类型时,也可指定元素对应的整型常量值。例如,描述逻辑值集合{TRUE、FALSE}的枚举类型boolean可定义如下:

enum boolean

{ TRUE=1 ,FALSE=0 };

该定义规定:TRUE的值为1,而FALSE的值为0。

而描述颜色集合{red,blue,green,black,white,yellow}的枚举类型colors可定义如下:

enum colors

{red=5,blue=1,green,black,white,yellow};

该定义规定red为5 ,blue为1,其后元素值从2 开始递增加1。green、black、white、yellow的值依次为2、3、4、5。此时,整数5将用于表示二种颜色red与yellow。通常两个不同元素取相同的整数值是没有意义的。

枚举类型的定义只是定义了一个新的数据类型,只有用枚举类型定义枚举变量才能使用这种数据类型。

8.1.2枚举类型变量的定义

定义枚举类型变量有三种方法,即:先定义类型后定义变量,定义类型的同时定义变量,直接定义变量,现介绍如下:

1.先定义类型后定义变量

格式: <枚举类型名> <变量1>〔,<变量2>,…,<变量n>〕;

例如:enum colors

{red=5,blue=1,green,black,white,yellow};

colors c1,c2;

c1、c2 为colors类型的枚举变量。

2.定义类型的同时定义变量

格式:enum <枚举类型名>

{ <枚举元素表> } <变量1>〔,<变量2>,…,<变量n>〕;

例如:enum colors

{red=5,blue=1,green,black,white,yellow}c1,c2;

3.直接定义枚举变量

格式:enum

{ <枚举元素表> } <变量1>〔,<变量2>,…,<变量n>〕;

例如:enum

{red=5,blue=1,green,black,white,yellow} c1=red,c2=blue;

由上例可以看出,定义枚举变量时,可对变量进行初始化赋值,c1的初始值为red,c2的初始值为blue。

8.1.3 枚举类型变量的引用

对枚举类型变量只能使用2类运算:赋值运算与关系运算。

1.赋值运算

C++中规定,枚举类型的元素可直接赋给枚举变量,且同类型枚举变量之间可以相互赋值。如:enum weekdays //定义星期日到星期六为枚举类型weekdays

{ Sun,Mon,Tue,Wed,Thu,Fri,Sat };

void main ( void )

{ weekdays day1,day2; //定义两个枚举型变量day1、day2

day1=Sun; //将元素Sun赋给枚举变量day1

day2=day1; //枚举变量day1赋给day2

cout<<day1<<endl; //输出day1的值,即Sun的序号0

}

该例定义了两个类型为weekdays的枚举类型变量day1与day2,这两个枚举型变量只能取集合 { Sun,Mon,Tue,Wed,Thu,Fri,Sat }中的一个元素,可用赋值运算符将元素Sun赋给day1。枚举变量day1的值可赋给同类枚举变量day2。注意:

(1)不能用键盘通过"cin>>"向枚举变量输入元素值,例如:cin>>day1是错误的。因此,枚举变量的值只能通过初始化或赋值运算符输入。

(2)可用"cout<<"输出枚举变量,但输出的是元素对应的序号值,而不是元素值。例如:cout<<day1; 用cout输出day1中元素Sun对应的序号值0,而不是元素Sun。

2.关系运算

枚举变量可与元素常量进行关系比较运算,同类枚举变量之间也可以进行关系比较运算,但枚举变量之间的关系运算比较是对其序号值进行的。例如:

day1=Sun; //day1中元素Sun的序号值为0

day2=Mon; //day2中元素Mon的序号值为1

if (day2>day1) day2=day1; //day2>day1的比较就是序号值关系式:1>0的比较

if (day1>Sat) da1=Sat; //day1>Sat的比较就是序号值关系式:0>6的比较

day2与day1的比较,实际上是其元素Mon与Sun序号值1与0的比较,由于1>0成立,所以day2>day1条件为真,day2=day1=Sun。同样由于day1中元素Sun的序号值0小于Sat的序号值6,所以day1>Sat条件为假,day1的值不变。

【例8.1】先定义描述6种颜色的枚举类型colors,然后再用该枚举类型定义枚举数组,任意输入6个颜色号,转换成对应的颜色枚举量后输入到枚举数组中,最后输出枚举数组中对应的颜色。

# include <iostream.h>

# include <stdlib.h> //使用exit(0)函数时必须包含stdlib.h头文件

enum colors //定义有6种颜色元素的枚举类型colors

{ red, blue,green,black,white,yellow };

void main( void)

{ colors color[6]; //定义枚举类型数组color[6]

int j,n;

cout<<"0:red,1:blue,2:green,3:black,4:white,5:yellow"<<endl;

cout<<" 请输入6个颜色号:";

for (j=0;j<6;j++)

{ cin >> n; //输入颜色号

if (n<0 || n>5 )

{ cout << "输入颜色值出错,请重新输入!";

exit(0);

}

else

switch(n) //将颜色号转换成颜色元素存入数组

{ case 0 : color[j]=red; break;

case 1 : color[j]=blue; break;

case 2 : color[j]=green ; break;

case 3 : color[j]=black; break;

case 4 : color[j]=white; break;

case 5 : color[j]=yellow; break;

}

}

for (j=0 ;j<6;j++) //循环6次,输出数组元素对应的颜色

{ switch (color[j])

{ case red : cout <<"red" ; break;

case blue: cout<<"blue" ; break;

case green : cout <<"green" ; break;

case black : cout<<"black" ; break;

case white : cout <<"white" ; break;

case yellow :cout <<"yellow" ; break;

}

cout<<'\t';

}

cout<<'\n';

}

程序执行时,屏幕提示:

0:red,1:blue,2:green,3:black,4:white,5:yellow

请输入6个颜色号:0 1 2 3 4 5

屏幕输出:red blue green black white yellow

由于无法通过键盘直接向枚举变量输入枚举元素值,所以程序中只能先输入枚举元素的序号值,然后用开关语句将序号值转换为元素值,并将元素值赋给枚举数组元素。同样,由于用cout无法输出枚举数组中元素值,所以在输出时,只能用开关语句判断输出哪一个元素,然后用cout<<"元素"方式输出对应的元素值。

【例8.2】定义一个描述三种颜色的枚举类型{red、blue、green},输出这三种颜色的全部排列结果。

解:这是三种颜色的全排列问题,用穷举法即可输出三种颜色的全部27种排列结果。

# include <iostream.h>

enum colors

{red , blue,green};

void show(colors color)

{ switch(color)

{ case red : cout<<"red";break;

case blue : cout<<"blue";break;

case green : cout<<"green";break;

}

cout<<'\t';

}

void main(void)

{ colors col1,col2,col3;

for(col1=red ;col1<=green;col1=colors(int (col1) +1))

for(col2=red ;col2<=green;col2=colors(int (col2) +1))

for(col3=red ;col3<=green;col3=colors(int (col3) +1))

{ show(col1);

show(col2);

show(col3);

cout<<'\n';

}

}

程序通过三重循环穷举出三种颜色所有的组合。for循环语句中,用枚举变量col1为循环变量,col1取值从red开始到green为止,循环变量的自加操作是通过表达式col1=colors(int (col1) +1) 来实现的,表达式中,先将col1转换成整数,然后加1,再转换成colors类型的枚举值赋给col1变量。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有