C++ 編程語言作爲一種功能強大的語言,對開發人員來說作用是非常大的。不過,其中有很多應用方式還需要我們去不斷的探討,不斷從中汲取經驗來達到熟練的程度。下面我們就先爲大家詳細介紹一下有關C++枚舉類型的相關概念。
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爲C++枚舉類型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、C++枚舉類型的定義
一個枚舉是一個類型,可以保存一組由用戶刻畫的值。定義之類,枚舉的使用很像一個整數類型。枚舉的定義具有以下形式,即以關鍵詞enum開頭,接着一個可選的枚舉名,下來是由大括號{}包含着一個由逗號分隔的枚舉子列表enumerators list:
- enum [enumeration name] {enumerator1[=value1],
enumerator2[=value2], ...};
- 如果枚舉沒有初始化, 即省掉"=整型常數"時, 則從第一個標識符開始, 順次賦給標識符0, 1, 2, ...。但當枚舉中的某個成員賦值後, 其後的成員按依次
加1的規則確定其值。
例如下列枚舉說明後, x1, x2, x3, x4的值分別爲0, 1, 2, 3。
- enum string{x1, x2, x3, x4}x;
當定義改變成:
enum string {x1,x2=0,x3=50,x4,}x;
則x1=0, x2=0, x3=50, x4=51
注意:
1. 枚舉中每個成員(標識符)結束符是",", 不是";", 最後一個成員可省略 ","。
2. 初始化時可以賦負數, 以後的標識符仍依次加1。
3. 枚舉變量只能取枚舉說明結構中的某個標識符常量。
例如:
enum string{x1=5,x2,x3,x4,};
enum strig x=x3;
此時, 枚舉變量x實際上是7。
enum 關鍵字在c中用的是比較多的,它常用來定義標記整型常量,你去看許多操作系統的源代碼,
- 都有用這個關鍵字來一次定義許多標記整型常量,其實它相當於定義一個整型常量的表,考試.大提示方
- 便應用時查找。當然他的大部分功能都可以被宏定義代替,不過畢竟enum關鍵字定義的東東是支持類
- 型檢查的,可以用編譯器來發現一些錯誤(enum定義的只能是整型的常量表) <!--分頁-->