在一些實際應用問題中,有些變量的取值被限定在一個有限的范圍內。例如一周只有七天,一年只有12個月等,可以把此類變量定義為枚舉類型。枚舉類型的定義中列舉出所有可能的取值,說明為該枚舉類型的變量取值不能超過定義的范圍。·
注意:枚舉類型是一種基本的數據類型,而不是構造類型,因為枚舉類型變量只能取一個值,它也不能再分解為任何類型。
1.定義
定義枚舉類型的一般形式為:
enum 枚舉名 { 枚舉常量表 } ;
在枚舉常量表中應列出所有可用的常量,這些常量也稱為枚舉元素。
例如:
enum weekday {sun, mou, tue, wed, thu, fri, sat } ;
該枚舉名為weekday,枚舉元素有7個,凡是被說明為weekday類型變量的取值只能是7天中的某一個值。
2.枚舉變量的說明
可以先定義類型再說明變量,或者在定義類型的同時說明變量。
例如:
enum weekday {sun, mou, tue, wed, thu, fri, sat } ;
enum weekday d1, d2, d3 ;
或者:
enum weekday {sun, mou, tue, wed, thu, fri, sat } d1, d2, d3 ;
或者:
enum {sun, mou, tue, wed, thu, fri, sat } d1, d2, d3 ;
3.注意事項
1)不能在程序中用賦值語句對枚舉常量進行賦值。
例如sun=5; mon=2; sun=mon;都是錯誤的。
2)枚舉元素本身由系統定義了一個表示序號的數值,從0開始順序定義為0,1,2,……。但也可以在定義類型時改變枚舉元素的值。
例如:上面的weekday中,sun值為0,mon值為1,……
也可以定義成:enum weekday {sun=7, mou, tue, wed, thu, fri, sat } ;,sun=7,mon=8,其后的元素值順序加1,sat=13。
3)可以把枚舉常量賦給枚舉變量,但不能把元素的序號值賦給枚舉變量。
例如:
d1=sun;d2=mon;——正確。
d1=0; d2=1; ——錯誤。
如果一定要把數值賦值給枚舉變量,則必須用強制類型轉換。
例如:
d1= (enum weekday)2;
意義是將順序號為2的枚舉元素賦給枚舉變量d1,相當於d1=tue;另外,枚舉元素不是字符常量也不是字符串常量,使用時不要加單、雙引號。
4)枚舉變量的值不能直接通過輸入函數從鍵盤上讀入,只能通過賦值語句或間接的輸入;也不能通過枚舉變量直接輸出其元素。
筆試中的一道題:
enum bg_color {BG_RED,BG_BLACK,BG_BLUE}; enum fg_color {FG_RED=2,FG_BLACK,FG_YELLOW,FG_GREEN}; int get(int type) { static int bc; static int fc=FG_BLACK;
if(type==0){return ++bc;} else{return ++fc;} } cout<<get(1)<<endl;
輸出:4
FG_BLACK、FG_YELLOW、FG_GREEN分別為 3 、4、5.
