关于C++枚举类型enum
一、何为枚举类型?
枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
声明形式:
enum 枚举名 {变量列表};
例如:
enum Weekday{SUN,MON.TUE,WED,THU,FRI,SAT};
定义枚举数据类型变量,例如:
Weekday myweekday;
(注意数据类型是Weekday而不是enum Weekday)
二、枚举类型应用说明
- 枚举元素具有默认数值,它们依次为:0,1,2,3,...。例如上例中SUN的值为0,MON的值为1,TUE为2,...,SAT为6。
- 也可以在声明中另行定义枚举元素的值,如:
enum Weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
定义SUN为7,MON为1,以后顺序加1,TUE为2,WED为3,...,SAT为6。
- 对枚举元素按常量处理,但不能对它们直接赋予常量值。例如,下面的的语句是错误的:
SUN=7;//SUN是枚举元素,不能直接赋予常量值
如需要将整数附值给枚举变量,应进行强制类型转换,例如:SUN=(Weekday)7;//在值前面加(类型)是常用的强制类型转换方法
- 枚举值可以进行关系运算:
1)可以使用关系运算符来比较两个枚举变量。例如,以下 if 语句判断存储在 myweekday1中的值是否小于存储在 myweekday中的值:
if ( myweekday1 < myweekday2)
如果 myweekday1存储的值小于 myweekday2的值,则该语句为 true。否则该语句将为 false。
2)可以使用整数值而不是符号名称来测试枚举变量。例如,以下两个 if 语句是等效的:
if myweekday== MON)
if ( myweekday == 1)
- 如果为枚举变量赋值,则它们必须是整数。以下赋值语句将产生错误:
enum Weekday{SUN=1.1,MON=1.2,TUE=1.3,WED=1.4,THU,FRI,SAT }; //错误
- 枚举数据类型的目的之一是符号名称有助于使程序自我解释。但是,这些名称不是字符串,而是数值,所以在输出时,输出的是数字,而不是字符串。例如:
Weekday myweekday = SUN;
cout << myweekday;//输出的是0这个数值
输入结果如下:
- 枚举值可以赋给整型变量,例如:
int a;
a = SUN;//枚举值可以赋给整形变量
cout << a;
- 因为枚举数据类型的符号名称与整数值相关联,所以它们可以在 switch 语句中使用,如下面的程序所示:
题目:口袋中有红,黄,蓝,白,黑5种颜色球若干个。每次从口袋中取出3个不同颜色的球,问有多少种取法?
#include<iostream>
using namespace std;
void transfer(int i)//将相应的数值组合通过switch语句转换为字符串
{
switch (i)
{
case 0:cout << "red "; break;
case 1:cout << "yello "; break;
case 2:cout << "blue "; break;
case 3:cout << "white "; break;
case 4:cout << "black "; break;
}
}
enum ball {red,yello,blue,white,black};//定义球的枚举类型
int main()
{
int i, j, k,count=0;
for (int i = red; i <= black; i++)
{
for (int j = i+1; j <= black; j++)
{
for (int k =j+1; k <= black; k++)
{
transfer(i);
transfer(j);
transfer(k);
cout <<endl;
count++;
}
}
}
cout << count;
return 0;
}
运行结果:
三,总结
当一个变量有几种可能的取值时,可以将它定义为枚举类型。枚举类型有利于程序的可读性。对枚举元素按常量处理,枚举元素具有默认数值,但不能对它们直接赋予常量值。因为枚举变量是整数,所以也可以使用关系运算符来比较两个枚举变量,并且通常配合switch语句来输出相应的值。