枚舉總結

1、枚舉enum的用途淺例
      寫程序時,我們常常需要爲某個對象關聯一組可選alternative屬性.例如,學生的成績分A,B,C,D等,天氣分sunny, cloudy, rainy等等。
      更常見的,打開一個文件可能有三種狀態:input, output和append. 典型做法是,對應定義3個常數,即:
      const int input = 1;
      const int output = 2;
      const int append = 3;
然後,調用以下函數:
      bool open_file(string file_name, int open_mode);
比如,
    open_file("Phenix_and_the_Crane", append);
       這種做法比較簡單,但存在許多缺點,主要的一點就是無法限制傳遞給open_file函數的第2個參數的取值範圍,只要傳遞int類型的值都是合法的。(當然,這樣的情況下的應對措施就是在open_file函數內部判斷第二個參數的取值,只有在1,2,3範圍內才處理。)
       使用枚舉能在一定程度上減輕這種尷尬(注1),它不但能實現類似於之前定義三個常量的功能,還能夠將這三個值組合起來成爲獨一無二的組。例如:
      enum open_modes {input = 1, output, append};
      以上定義了open_modes爲枚舉類型enumeration type。每一個命名了的枚舉都是唯一的類型,是一個類型標示器type specifier。例如,我們可以重新寫一個open_file函數:
      bool open_file(string file_name, open_modes om);
      在open_modes枚舉中,input, output, append稱爲枚舉子enumerator, 它們限定了open_modes定義的對象的取值範圍。這個時候,調用open_file函數和之前的方法還是一模一樣:
     open_file("Phenix_and_the_Crane", append);
     但是,如果傳遞給open_file的第二個參數不是open_modes枚舉類型值的話(注1),那麼編譯器就會識別出錯誤;就算該參數取值等價於input, output, append中的某個,也一樣會出錯哦!例如:
     open_file("Phenix_and_the_Crane", 1);

2、枚舉的定義
      一個枚舉是一個類型,可以保存一組由用戶刻畫的值。定義之類,枚舉的使用很像一個整數類型。
枚舉的定義具有以下形式,即以關鍵詞enum開頭,接着一個可選的枚舉名,下來是由大括號{}包含着一個由逗號分隔的枚舉子列表enumerators list:
      enum [enumeration name] {enumerator1[=value1], enumerator2[=value2], ...};

3、枚舉子的類型和取值
      枚舉子的類型就是它所在的那個枚舉,例如前面說到的open_modes枚舉中,input,output和append等枚舉子的類型都是open_modes。這種做法,其實是爲了賦予用戶和編譯器一些有關該變量擬議中的用途的提示。
      默認下,第一個枚舉子被賦值0,接下來的枚舉子取值是前面一個枚舉子的取值+1,例如:
      enum weather {sunny, cloudy, rainy, windy};
其中
      sunny == 0,
      cloudy == 1,
      rainy == 2,
      windy == 3;
       以上是默認情況,有時候我們希望顯式地指定某個枚舉子的值,那麼會出現什麼情況呢?看看:
       enum some_fruit {apple = 3, orange, banana = 4, bear};
       好了,apple == 3, banana == 4; 那麼orange和bear呢?記得前面說過一句,默認下”接下來的枚舉子取值是前面一個枚舉子的取值+1“。既然這兩個枚舉子沒有顯式賦值,那麼就按照默認規則辦事,所以 orange == 4, bear == 5.
       從這個例子也可以看出,同一枚舉中枚舉子的取值不需要唯一。這樣有什麼用處呢?下面是個簡單的例子:
       enum some_big_cities {
                                               Guangzhou = 4,
                                               Shenzhen    = 4,
                                               Hongkong   = 4,
                                              

發佈了50 篇原創文章 · 獲贊 86 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章