定義說明
1. 枚舉類型定義的一般形式為:
enum 枚舉名{ 枚舉值表 };
在枚舉值表中應羅列出所有可用值。這些值也稱為枚舉元素。
例如:
該枚舉名為weekday,枚舉值共有7個,即一周中的七天。凡被說明為weekday類型變數的取值只能是七天中的某一天。
2. 枚舉變數的說明
如同結構體(struct)和共用體(union)一樣,枚舉變數也可用不同的方式說明,即先定義後說明,同時定義說明或直接說明。
設有變數a,b,c被說明為上述的weekday,可採用下述任一種方式:
記憶體空間
enum是枚舉型,所占記憶體空間恆等於4字;union是共用體,成員共用一個變數緩衝區。
賦值和使用
枚舉類型在使用中有以下規定:
1. 枚舉值是常量,不是變數。不能在程式中用賦值語句再對它賦值。
2. 枚舉元素本身由系統定義了一個表示序號的數值,從0開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,sat值為6。
只能把枚舉值賦予枚舉變數,不能把元素的數值直接賦予枚舉變數。如一定要把數值賦予枚舉變數,則必須用強制類型轉換。
如:
特別注意:在VS2010等編譯器中,強制轉換格式應為:(weekday)2,如果前面加上了enum,編譯時會出現“類型重定義”的錯誤。
其意義是將順序號為2的枚舉元素賦予枚舉變數a,相當於:
還應該說明的是枚舉元素不是字元常量也不是字元串常量,使用時不要加單、雙引號。
3. 如果枚舉值與一些關鍵字衝突,例如:
由於程式有可能使用了iostream,並且使用了命名空間std,這時如果直接使用end進行賦值就有可能出現“不明確”符號的錯誤。解決此問題,有兩個方法:
(1)定義枚舉值時應避免使用常用關鍵字,可以加前綴進行區分
例如:
(2)可以在枚舉值前面加入枚舉類型:course::end
用法
Enum定義
Enum是enumeration(列舉)的簡寫形式,包含在java.lang包中.熟悉C, C++, C#, 或 Pascal的人應該對列舉有所了解,先看個例子:
接口方法實現列舉
一個enum是定義一組值的對象,它可以包括零個或多個值成員.它是屬於enum類型的,一個enum對象中不可有兩個或多個相同的屬性或值.在此之前的java程式設計師一般是 用接口的方法實現列舉的,如 :
Enum實例
引入了enum的java的列舉的編寫方便了許多,只須定義一個enum型的對象.enum對象的值都會自動獲得一個數字值,從0開始,依次遞增.看一個比較簡單的enum實現的例子:
運行上述代碼你會得到 以下結果:
winter
spring
summer
fall
Enum的屬性調用:
下面的代碼展示了調用enum對象的方法,這也是它通常的用法:
為Enums添加屬性和方法
enums也可以象一般的類一樣添加方法和屬性,你可以為它添加靜態和非靜態的屬性或方法,這一切都象你在一般的類中做的那樣.
就是這么的簡單.但是有一點是需要注意的,那就是enums的值列表必須緊跟在enum聲明,不然編譯時將會出錯.
Enums 構造函式 :
和類一樣enums也可以有自己的構造函式
儘管enums有這么多的屬性,但並不是用的越多越好,如果那樣還不如直接用類來的直接.enums的優勢在定義int最終變數僅當這些值有一定特殊含義時.但是如果你需要的是一個類,就定義一個類,而不是enum.