1. 為什麼會有枚舉???(大概了解下)
答:任何新名詞的産生都是為了解決某一個實際問題的。當然枚舉的産生也同樣如此,它是為了更友善的解決某一個問題(馬上下面會說到),沒有枚舉也能解決問題,但是有了枚舉能更友善、更清晰的解決問題。
舉個例子:
我們玩一款角色扮演類遊戲,都要先建立角色,如果角色有3種(狂戰士、龍騎士、魔法師),我們該怎麼定義這3種角色呢???
簡單的方法信手拈來:(變量名采用中文名首字母大寫)
const int KZS = 100;
const int LQS = 200;
const int MFS = 300;
以上就定義好了3種角色,程式可以這麼寫,但是存在問題,這3個變量,我不清楚本身是相關聯的。感覺像是各自定義不相關的3個變量。不太好了解,一旦這種定義多了,對于大型程式,了解起來都比較費勁!!
由此,枚舉就産生了。。。
因為這3種職業都屬于角色這個屬性,他們是相關聯的,使用枚舉來定義更加合适!!更加簡潔!!更加清晰!!
定義如下:(看不懂沒關系,下面會細講,這邊大概了解為什麼使用枚舉,以及他的定義大緻長什麼樣就行了)
enum ACTOR
{
KZS = 100,
LQS = 200,
MFS = 300
};
使用枚舉有如下好處: 這邊定義把3個角色聯系到一起了,不再像const 變量那樣看起來毫無聯系。
2. 枚舉的定義
定義注意幾點: ① 使用關鍵字 enum
② 枚舉成員用 逗号(,)隔開,最後不需要逗号(,)
③ 成員在 大括号内 { }
④ 定義最後 大括号 } 後面加分号(;)
舉例說明如下:
enum ACTOR
{
KZS = 100,
LQS = 200,
MFS = 300
};
定義 使用關鍵字 enum 開頭 ,跟着 枚舉名(一般全大寫),接下來 一對大括号 { },大括号内各枚舉成員形如
枚舉成員名 = 常量表達式,
除了最後一行,每行都是以逗号(,)結尾,最後一行不需要逗号(,)
最後,别忘了,最後大括号 } 後面的分号(;)
至此,枚舉的定義就完成了,很簡單吧!!!
這邊多說一句,定義中,不要畫蛇添足,比如出現如下
int KZS = 100,
多了個int,這邊不需要類型,本身就是枚舉成員,一定要注意!!!
3. 枚舉的初始化
枚舉成員初始化必須是 常量表達式(編譯器編譯期間能計算出值的整型表達式),比如 整型字面常量值 屬于 常量表達式
例子一,
enum ACTOR
{
KZS = 100,
LQS = 200,
MFS = 300
};
第一個枚舉成員KZS 被初始化為 100,
第二個枚舉成員LQS 被初始化為 200,
第三個枚舉成員MFS 被初始化為 300;
例子二,
enum ACTOR
{
KZS,
LQS,
MFS
};
第一個枚舉成員KZS 被預設初始化為 0,
第二個枚舉成員LQS 被初始化為 1,(0+1)
第三個枚舉成員MFS 被初始化為 2;(1+1)
枚舉定義中,若未提供初始化式,第一個成員預設初始化為0,後面的成員依次在前1個成員基礎值+1。
例子三,
enum ACTOR
{
KZS,
LQS = 10,
MFS
};
第一個枚舉成員KZS 被預設初始化為 0,
第二個枚舉成員LQS 被初始化為 10,
第三個枚舉成員MFS 被初始化為 11;(10+1)
例子四,
enum ACTOR
{
KZS,
LQS,
MFS = 1
};
第一個枚舉成員KZS 被預設初始化為 0,
第二個枚舉成員LQS 被初始化為 1,(0+1)
第三個枚舉成員MFS 被初始化為 1;
4. 枚舉成員是 常量
① 枚舉成員本身 就是 常量表達式
② 因為①,是以不能改變枚舉成員的值
③ 任何能用到 常量表達式的地方,都可以使用 枚舉成員。
5. 枚舉注意點
① 每個enum 都定義了一個唯一的類型
② 同類型的枚舉 可以 指派,不同類型 不能互相 指派
③ 枚舉對象的初始化 和 指派,隻能用 其本身枚舉成員 或者 同類型其他枚舉對象。
舉例說明:
enum ACTOR
{
KZS = 100,
LQS = 200,
MFS = 300
};
和
enum PROFESSION
{
TEACHER = 1,
POLICE = 2,
FARMER = 3
};
定義對象如下:
ACTOR actor = KZS; // 正确,使用枚舉類型本身成員 初始化;
ACTOR actor_1 = 200; // 錯誤,不能使用 純數字來初始化;錯覺,即使300 和 MFS相關聯,也不能這麼做;
actor_1 = 300; // 錯誤,不能使用 純數字來指派;
actor_1 = actor ; // 正确,使用 同類型 枚舉對象 來指派;
PROFESSION person = actor; // 錯誤,不同類型枚舉對象 不能初始化;
person = actor_1 ; // 錯誤,不同類型枚舉對象 不能指派;
本文暫時先介紹這些,枚舉的其他用法(如 用在類中),後續再開博詳說,各位,告辭!!如有不對之處,敬請指正!!轉載請說明出處,謝謝!!!