如果一個變量你需要幾種可能存在的值,那么就可以被定義成為枚舉類型。之所以叫枚舉就是說將變量或者叫對象可能存在的情況也可以說是可能的值一一例舉出來。
舉個例子來說明一吧,為了讓大家更明白一點,比如一個鉛筆盒中有一支筆,但在沒有打開之前你并不知道它是什么筆,可能是鉛筆也可能是鋼筆,這里有兩種可能,那么你就可以定義一個枚舉類型來表示它!
enum?box{pencil,pen};//這里你就定義了一個枚舉類型的變量叫box,這個枚舉變量內含有兩個元素也稱枚舉元素在這里是pencil和pen,分別表示鉛筆和鋼筆。
這里要說一下,如果你想定義兩個具有同樣特性枚舉類型的變量那么你可以用如下的兩種方式進行定義!
enum?box{pencil,pen};?
?
enum?box?box2;//或者簡寫成box?box2;
再有一種就是在聲明的時候同時定義。
enum?{pencil,pen}box,box2;?//在聲明的同時進行定義!
枚舉變量中的枚舉元素系統是按照常量來處理的,故叫枚舉常量,他們是不能進行普通的算術賦值的,(pencil=1;)這樣的寫發是錯誤的,但是你可以在聲明的時候進行賦值操作!
enum?box{pencil=1,pen=2};
? 但是這里要特別注意的一點是,如果你不進行元素賦值操作那么元素將會被系統自動從0開始自動遞增的進行賦值操作,說到自動賦值,如果你只定義了第一個那么系統將對下一個元素進行前一個元素的值加1操作,例如
enum?box{pencil=3,pen};//這里pen就是4系統將自動進行pen=4的定義賦值操作!
前面說了那么多,下面給出一個完整的例子大家可以通過以下的代碼的學習進行更完整的學習!
#include?<iostream>?
using?namespace?std;?
?
void?main(void)?
{?
????enum?egg?{a,b,c};?
????enum?egg?test;?//在這里你可以簡寫成egg?test;?
?
????test?=?c;?//對枚舉變量test進行賦予元素操作,這里之所以叫賦元素操作不叫賦值操作就是為了讓大家明白枚舉變量是不能直接賦予算數值的,例如(test=1;)這樣的操作都是不被編譯器所接受的,正確的方式是先進行強制類型轉換例如(test?=?(enum?egg)?0;)!?
?
????if?(test==c)?
????{?
????????cout?<<"枚舉變量判斷:test枚舉對應的枚舉元素是c"?<<?endl;?
????}?
?
????if?(test==2)?
????{?
????????cout?<<"枚舉變量判斷:test枚舉元素的值是2"?<<?endl;?
????}?
?
????cout?<<?a?<<?"|"?<<?b?<<?"|"?<<?test?<<endl;?
?
????test?=?(enum?egg)?0;?//強制類型轉換?
????cout?<<?"枚舉變量test值改變為:"?<<?test?<<endl;?
????cin.get();?
}
看到這里要最后說一個問題,就是枚舉變量中的枚舉元素(或者叫枚舉常量)在特殊情況下是會被自動提升為算術類型的!
#include?<iostream>?
using?namespace?std;?
?
void?main(void)?
{?
????enum?test?{a,b};?
????int?c=1+b;?//自動提升為算術類型?
????cout?<<?c?<<endl;?
????cin.get();?
}