C++: enum枚举类型的用法
课题目标
了解enum枚举类型的基本形式,掌握enum枚举类型的使用方法。
课题引入
从一个对一周(包含周一到周日)的每天进行声明与赋值,来引出enum使用的便捷性,引出enum。
课题详解
一,枚举类型的说明
枚举数据类型是一种由程序员定义的数据类型,其合法值是与它们关联的一组命名整数常量。
之所以被称为枚举类型,就是因为命名常量是作为数据类型定义的一部分而枚举或列出的
以下是枚举类型声明的示例:
1 enum <类型名> {<枚举常量表>};
关键字enum:说明接下来定义的是一个枚举类型。
类型名字:指明此处定义的枚举类型的名字。
常量表:
由枚举常量(或称枚举成员)构成。枚举常量表列出枚举类型所有可能的取值,各枚举常量之间用“,”间隔,且各枚举常量必须不同。
例如(解引题):
1 enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。
例如,以下定义非法
1 enum book{'a','b','c','d'};//枚举类型不能是字符常量 2 3 enum year{1998,1999,2010,2012};//枚举常量不能是整形常量
二,枚举类型的赋值
1.枚举类型在声明之后具有默认值。默认从0开始,依次为0,1,2,3......
例如(解引题):
1 enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday 2 //SUN=0,MON=1,依次为0,1,2,3.....
2.同时也可以在声明中直接赋值。它们必须是整数。枚举变量相当于整型变量的一个子集
例如(解引题):
1 enum Weekday{SUN=7,MON=2,TUE,WED,THU,FRI,SAT}; 2 //定义SUN=7,MON=2,则后面的值在前面值的基础上依次加1,即TUE=3,WED=4......
1 enum weekday{SUN=1.1,MON=1.2,......};//枚举变量赋值只能是整数,相当于整型变量的一个子集,此语句非法
3.对枚举元素按常量处理,但不能对它们直接赋予常量值。
例如(解引题):
1 enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday 2 SUN=0;//SUN是枚举元素,不能赋值,此语句非法
若将整数值赋给枚举变量需要进行强制类型转换:值前面加(类型名)
例如(解引题):
enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday SUN=(Weekday)7;//在值前面加(类型)是常用的强制类型转换方法
三,枚举类型的运用
例题:口袋中有红黄蓝白黑5种颜色的球若干个。每次从口袋中任意取出三个球,问得到3中不通过颜色的球的可能取法。
解题思路:球只有五种颜色,可用枚举类型表示球的颜色。可以利用三重循环穷举出每一种可能取法。
1 #include<iostream> 2 3 using namespace std; 4 5 void main() 6 { 7 enum colors{red,yellow,blue,white,black}; 8 9 colors color; 10 11 int i,j,k,n=0,loop;//n累计组合数 12 13 for(i=red;i<=black;i++)//当i为某一颜色时 14 { 15 for(j=red;j<=black;j++)//当j为某一颜色时 16 { 17 if(i!=j)//若前两个球的颜色不同 18 { 19 for(k=red;k<=black;k++)//只有前两个球的颜色不同,才需要检查第3个球的颜色 20 { 21 if(k!=i&&k!=j)//三个球的颜色都不同 22 { 23 n=n+1; 24 25 cout<<" "<<n;//输出当前的n值作为组合的编号 26 27 for(loop=1;loop<=3;loop++)//先后对三个球做处理 28 { 29 switch(loop) 30 { 31 case 1:color=colors(i);break;//colors(i)是强制类型转换,使color的值为i 32 33 case 2:color=colors(j);break;// j 34 35 case 3:color=colors(k);break;// k 36 37 default :break; 38 } 39 40 switch(color) //判断color的值,输出相应的颜色 41 { 42 case red:cout<<" "<<"red";break; 43 44 case yellow:cout<<" "<<"yellow";break; 45 46 case blue:cout<<" "<<"blue";break; 47 48 case white:cout<<" "<<"white";break; 49 50 case black:cout<<" "<<"black";break; 51 52 default :break; 53 } 54 } 55 cout<<endl; 56 } 57 } 58 } 59 } 60 } 61 cout<<"共有"<<n<<"个组合"<<endl; //输出组合的个数 62 }