枚舉類型

 

 

 

 

 

1.實驗目的

       (1)理解枚舉類型的優缺點並學會使用枚舉類型。ios

       (2)掌握枚舉類型的使用條件和各類限制。函數

2.實驗內容

       經過一些簡單的函數實驗來展示枚舉類型的使用方式和使用場景。spa

3.實驗過程

基本概念

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);

4.實驗心得體會

經過此次實驗,很清晰的瞭解了枚舉類型的基本語法和使用場景,對枚舉類型的使用有更深層次的理解,最重要的是知道了何時須要使用枚舉來表達程序意義更加符合,同時使用枚舉也提升了代碼的可讀性。

相關文章
相關標籤/搜索