C++枚舉類(lèi)型用途及定義詳解
C++編程語(yǔ)言作為一種功能強(qiáng)大的語(yǔ)言,對(duì)開(kāi)發(fā)人員來(lái)說(shuō)作用是非常大的。不過(guò),其中有很多應(yīng)用方式還需要我們?nèi)ゲ粩嗟奶接懀粩鄰闹屑橙〗?jīng)驗(yàn)來(lái)達(dá)到熟練的程度。下面我們就先為大家詳細(xì)介紹一下有關(guān)C++枚舉類(lèi)型的相關(guān)概念。
1、枚舉enum的用途淺例
寫(xiě)程序時(shí),我們常常需要為某個(gè)對(duì)象關(guān)聯(lián)一組可選alternative屬性.例如,學(xué)生的成績(jī)分A,B,C,D等,天氣分sunny, cloudy, rainy等等。更常見(jiàn)的,打開(kāi)一個(gè)文件可能有三種狀態(tài):input, output和append. 典型做法是,對(duì)應(yīng)定義3個(gè)常數(shù),即:
- const int input = 1;
- const int output = 2;
- const int append = 3;
然后,調(diào)用以下函數(shù):
- bool open_file(string file_name, int open_mode);
比如,
- open_file("Phenix_and_the_Crane", append);
這種做法比較簡(jiǎn)單,但存在許多缺點(diǎn),主要的一點(diǎn)就是無(wú)法限制傳遞給open_file函數(shù)的第2個(gè)參數(shù)的取值范圍,只要傳遞int類(lèi)型的值都是合法的。(當(dāng)然,這樣的情況下的應(yīng)對(duì)措施就是在open_file函數(shù)內(nèi)部判斷第二個(gè)參數(shù)的取值,只有在1,2,3范圍內(nèi)才處理。)
使用枚舉能在一定程度上減輕這種尷尬(注1),它不但能實(shí)現(xiàn)類(lèi)似于之前定義三個(gè)常量的功能,還能夠?qū)⑦@三個(gè)值組合起來(lái)成為***的組。例如:
- enum open_modes {input = 1, output, append};
以上定義了open_modes為C++枚舉類(lèi)型enumeration type。每一個(gè)命名了的枚舉都是唯一的類(lèi)型,是一個(gè)類(lèi)型標(biāo)示器type specifier。例如,我們可以重新寫(xiě)一個(gè)open_file函數(shù):
- bool open_file(string file_name, open_modes om);
在open_modes枚舉中,input, output, append稱(chēng)為枚舉子enumerator, 它們限定了open_modes定義的對(duì)象的取值范圍。這個(gè)時(shí)候,調(diào)用open_file函數(shù)和之前的方法還是一模一樣:
- open_file("Phenix_and_the_Crane", append);
但是,如果傳遞給open_file的第二個(gè)參數(shù)不是open_modes枚舉類(lèi)型值的話(huà)(注1),那么編譯器就會(huì)識(shí)別出錯(cuò)誤;就算該參數(shù)取值等價(jià)于input, output, append中的某個(gè),
也一樣會(huì)出錯(cuò)哦!例如:
- open_file("Phenix_and_the_Crane", 1);
2、C++枚舉類(lèi)型的定義
一個(gè)枚舉是一個(gè)類(lèi)型,可以保存一組由用戶(hù)刻畫(huà)的值。定義之類(lèi),枚舉的使用很像一個(gè)整數(shù)類(lèi)型。枚舉的定義具有以下形式,即以關(guān)鍵詞enum開(kāi)頭,接著一個(gè)可選的枚舉名,下來(lái)是由大括號(hào){}包含著一個(gè)由逗號(hào)分隔的枚舉子列表enumerators list:
- enum [enumeration name] {enumerator1[=value1],
enumerator2[=value2], ...};
【編輯推薦】