(1)理解枚舉類型的優缺點並學會使用枚舉類型。ios
(2)掌握枚舉類型的使用條件和各類限制。函數
經過一些簡單的函數實驗來展示枚舉類型的使用方式和使用場景。spa
1. 枚舉的定義以下:code
1 enum 枚舉類型名 {變量值列表};
2. 格式說明:blog
·關鍵字enum——指明其後的標識符是一個枚舉類型的名字。it
·變量值列表——由枚舉量構成,各枚舉量之間以「 ,」間隔,且必須各不相同。io
·舉例:編譯
1 例如,咱們能夠定義一種新的變量類型叫作color來儲存不一樣的顏色: 2 3 enum color{black,blue,green,yellow,red,white,purple};
3. 上述color這句話,有兩個做用:ast
(1) 聲明color爲新的數據類型,成爲枚舉(enumeration);class
(2) 聲明black、blue等爲符號常量,一般稱爲枚舉量。
·注意:
(1) 編譯系統爲每一個枚舉量(假設有n個)指定一個整型數值,系統默認從0開始,依次爲:0,1,2…,n。
1 enum color{ black, blue, green, yellow, red, white, purple }; 2 //black=0,blue=1,green=2,yellow=3,red=4,white=5,purple=6
(2) 能夠在定義枚舉類型時爲部分或所有枚舉常量指定整數值,在指定值以前的枚舉常量仍按默認方式取值,而指定值以後的枚舉常量按依次加1的原則取值。各枚舉常量的值能夠重複。
enum color{ black, blue=7, green, yellow, red, white, purple }; //black=0,blue=7,green=8,yellow=9,red=10,white=11,purple=12 enum color{ black=7, blue=1, green, yellow, red, white, purple }; //black=7,blue=1,green=2,yellow=3,red=4,white=5,purple=6
(3) 枚舉量只能以標識符形式表示,而不能是整型、字符型等文字常量。
例如,下面語句是非法的:
1 enum letter { 'a', 'd', 'F', 's', 'T' }; //枚舉常量不能是字符常量 2 3 enum year{ 2000, 2001, 2002, 2003, 2004, 2005 }; //枚舉常量不能是整型常量 4 5 //改成如下定義則合法: 6 7 enum letter{ a, d, F, s, T }; 8 9 enum year{ y2000, y2001, y2002, y2003, y2004, y2005 };
4. 枚舉變量的使用:
·在上述color這個定義裏咱們沒有使用任何基本數據類型,也就是說咱們創造了一個新的數據類型,而它沒有基於任何已經存在的數據類型。
(1)定義格式:定義枚舉類型事後,就能夠定義該枚舉類型的變量,如:
1 color mycolor=blue; 2 enum color mycolor = blue; 3 //這兩種寫法均可以,C++中聲明完枚舉類型後,聲明變量時,能夠不寫關鍵字enum 4 //其中的color至關於咱們之前使用的int、float...也就是說,mycolor這個變量爲color型
也能夠類型和變量同時定義(甚至類型名可省),格式以下:
1 enum { black, blue, green, yellow, red, white, purple }mycolor;
(2)枚舉量能夠進行關係運算,參與運算時用其自己的整數值。例如,設有定義:
1 enum color_set1 { RED, BLUE, WHITE, BLACK } color1, color2; 2 enum color_set2 { GREEN, RED, YELLOW, WHITE } color3, color4;
容許的賦值操做以下:
1 color3 = RED; //將枚舉常量值賦給枚舉量 2 color4 = color3; //相同類型的枚舉量賦值,color4的值爲RED 3 int i = color3; //將枚舉量賦給整型變量,i的值爲0 4 int j = GREEN; //將枚舉常量賦給整型變量,j的值爲0
不容許的賦值操做以下:
1 BLACK = 0; //BLACK是枚舉量,此語句非法。
容許的關係運算符有:==、<、>、<=、>=、!= 等,例如:
1 //比較同類型枚舉變量color3,color4是否相等 2 if (color3 == color4) cout << "相等"; 3 //輸出的是變量color3與WHITE的比較結果,結果爲1 4 cout << color3<WHITE; 5 //不一樣類型的枚舉變量之間不能相互賦值。如: color1=color3; //非法
枚舉量的值能夠直接輸出,輸出的是枚舉量的整數值:
1 cout << color3; //輸出的是color3的整數值,即RED的整數值0
例如一場比賽的結果有四種狀況,勝(WIN),負(LOSE),平局(TIE),取消(CANCEL),編寫程序輸出這四種狀況。
1 #include<iostream> 2 using namespace std; 3 4 enum GameResult {WIN,LOSE,TIN,CANCEL}; 5 6 int main() 7 { 8 GameResult result; 9 enum GameResult omit = CANCEL; 10 11 for (int count = WIN; count <= CANCEL; count++) { //隱式類型轉換 12 result = GameResult(count); //顯式類型轉換 13 if (result == omit) 14 cout << "The game was cancelled" << endl; 15 else { 16 cout << "The game was played"; 17 if (result == WIN) 18 cout << "and we won!"; 19 if (result == LOSE) 20 cout << "and we lost!"; 21 cout << endl; 22 } 23 } 24 return 0; 25 }
1. 枚舉型數據能夠和整型數據相互轉換
(1) 如上述代碼中的:
int count=WIN
就是把枚舉類型的數據WIN隱式轉換爲整型,做爲整形變量count的初值。在循環控制條件
Count<=CANCEL
中,也會把枚舉類型數據CANCEL隱式轉換爲count,再與count進行比較。
(2) 而整型數據到枚舉數據的轉換,則使用顯式轉換方式,如上述代碼中的:
result=GameResult(count);
此外,也能夠利用前面介紹過的static_cast完成轉換:
result=static_cast<GameResult>(count);
經過此次實驗,很清晰的瞭解了枚舉類型的基本語法和使用場景,對枚舉類型的使用有更深層次的理解,最重要的是知道了何時須要使用枚舉來表達程序意義更加符合,同時使用枚舉也提升了代碼的可讀性。