在之前可能用字串表示,現在c++有另一個新的選擇了,那就是「列舉」
例如,我們用一個變數來記錄球的顏色,我們希望可以建立一個型態(就像int就是整數型態),
例如:
而這一個變數分別只能代表三種顏色,分別是「紅色」、「黑色」、「白色」
而我們就是用以下宣告:
enum Color {red, black,white};
若我們都沒有給它定義這三種顏色的數值是多少,則預設第一個是0,後面,同樣沒有給值的話,就是前面的數值加1。則此例為red=0,black=1,white=2。
enum Color {red=2,black=5,white}
這一個例子為red=2,black=5,white=6
而我們之後就可以建立一個新的變數它是屬於Color的這一個型態
Color mycolor = red; // mycolor=0 這是錯誤的定義
這裡我們要注意一下,我們定義這一個變數時,可以給它這三種顏色作為它的初始值,但是,不能給它數值作為初始值
因此在寫判斷式時,就要寫像這樣
switch (mycolor)
{
case red:
printf("that is red\n");
break;
case black:
printf("that is black\n");
break;
case white:
printf("that is white\n");
break;
default:
printf("out of define color\n");
}
而判斷式中的red,black,white也是可以用數字代替。
透過enumeration,我們可以比較好管理每一個變數型態的可能值。
另外,我們可以做以下運算:
Color mycolor = red;
std::cout << mycolor+1 << std::endl;
因red代表0,所以,mycolor+1的mycolor會被當作0,所以,最後印出來的結果會是1。
Color mycolor = Color(2);
上面這一個是另一個初始化的方法,使mycolor=2,因為,我們不能直接把mycolor設定為2,所以,可以用這一個方法取代
[2008.11.28 補充]
字串→數字(成立)
字串←數字(不成立)
[2009.01.07 補充]
可以建立匿名列舉
class foo {
enum Color {red, black,white};
};
不論在其它類別或是本類別可以使用foo::red或foo::black或foo::white來使用
詳細解說可以參考C++ Gossip: 列舉(Enumeration)
沒有留言:
張貼留言