發新話題

C++ Gossip - 物件基礎《封裝的進階議題》列舉

C++ Gossip - 物件基礎《封裝的進階議題》列舉

在C++中所謂列舉(Enumeration)型別,就是以關鍵字enum開始加上一個列舉名稱,並以大括號括住要群組管理的常數,例如:
enum Actions{stop, sit, stand, walk, run};


上例中宣告一個列舉型態Actions,大括號中每一個元素稱為列舉元(enumerator),預設上列舉元從第一個開始的實際數值是0,然後依次遞增,以上例而言,stop為0、sit為1、stand為2、walk為3、run為4,您也可以自行為列舉元設定數值,例如:
enum Actions{stop = 1, sit, stand, walk, run};


上例來說,stop為1,下一個列舉元如果沒有設定數值的話,則自動遞增1,所以sit為2、stand為3、walk為4、run為5,列舉的常數值不需獨一無二,例如下例:
enum Actions{stop = 1, sit, stand = 2, walk, run};


下一個列舉元如果沒有設定數值的話,則自動遞增1,所以上例中stop為1、sit為2、stand為2、walk為3、run為4。

宣告列舉之後,您可以用它來宣告列舉變數,例如:
Actions action = stop;


上例中action只接受來自Actions中規定的列舉元,雖然實際上列舉元對應一個數值,但您不可以這麼指定數值給列舉:
Actions action = 1; // error, invalid conversion from `int' to `Actions'


在必要的時候,列舉元的數值可用來與其它數值作運算,例如:
Actions action = stand;
cout << stand + 1 << endl;


列舉值的數值被取出再進行加1,所以上例中會在文字模式下顯示數值3,但要知道列舉不能進行++或--的動作,例如:
Actions action = stand;
stand++; // error, no `operator++(int)' declared for postfix `++', trying prefix operator instead


列舉常用在函式的引數傳遞,與純綷使用常數來作為操作相比,列舉可以限制傳入函式的引數範圍。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。