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 }