enum Car {PORSCHE, FERRARI, JAGUAR};
Car sportsCar;
enum Car {PORSCHE, FERRARI, JAGUAR} sportsCar;
以下語句不但宣告了 Car 資料型別,而且定義了 2 個變數 myCar 和 yourCar:enum Car {PORSCHE, FERRARI, JAGUAR} myCar, yourCar;
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY };
Day today;
today = THURSDAY;
但是,正如前面已經介紹過的,以下語句是非法的。如果試圖編譯它,則會出現一個錯誤訊息。today = 3; //錯誤
在給 enum 變數賦值時,應該使用有效的列舉量。但是,如果某些情形要求必須將整數值儲存在 enum 變數中,則可以通過強制轉換的方式,將整數轉換為 enum 資料型別,範例如下:today = static_cast<Day>(3);
該語句的作用與以下語句是一樣的:today = THURSDAY;
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY }; int today = THURSDAY; Day workday = FRIDAY; int tomorrow = workday; cout << today <<" "<< tomorrow << endl;當該程式碼執行時,它將顯示
3 4
。
Day day1, day2; // 定義 2 個 Day 變數
day1 = TUESDAY; // 將 TUESDAY 賦值給 day1
day2 = day1 + 1; //錯誤!該語句不起作用
day2 = static_cast<Day> (day1 + 1); //該語句有效
cout << MONDAY << endl;
如果要讓列舉量顯示諸如“Monday”這樣的字串,則需要編寫程式碼來產生所需的字 符串。例如,如果 workDay 是一個已經被初始化為某個值的 Day 變數,則以下switch語句將根據變數的值顯示對應的日期名稱:switch(workDay) { case MONDAY : cout <<"Monday"; break; case TUESDAY : cout <<"Tuesday"; break; case WEDNESDAY: cout <<"Wednesday"; break; case THURSDAY : cout <<"Thursday"; break; case FRIDAY : cout <<"Friday"; break; }
Double sale, total = 0.0; for ( Day workday = MONDAY; workday <= FRIDAY ; workday++) // 錯誤 { cout << "Enter the sales for day " << (workday +1) << ": "; cin >> sales; total += sales; }要解決該問題,可以將以上語句修改為如下形式:
for ( Day workday = MONDAY; workday <= FRIDAY; workday = static_cast<Day>(workday + 1))
但是,更簡單的方法是將迴圈控制變數變成 int 型別。按照這個思路,可以將上面的語句修改如下:for ( int workday = MONDAY; workday <= FRIDAY;workday++) { cout << "Enter the sales for day " << (workday + 1) <<":"; cin >> sales; total += sales; }
enum class Presidents { MCKINLEY, ROOSEVELT, TAFT };
enum class VicePresidents { ROOSEVELT, FAIRBANKS, SHERMAN };
::
操作符。以下是 3 個範例:Presidents prez = Presidents::ROOSEVELT; VicePresidents vp1 = VicePresidents::ROOSEVELT; VicePresidents vp2 = VicePresidents::SHERMAN;第一個語句定義了名為 prez 的 Presidents 變數,並且使用了 Presidents::ROOSEVELT 列舉量作為它的初始化值;第二個語句定義了名為 vpl 的 VicePresidents 變數,並且使用了 VicePresidents::ROOSEVELT 列舉量作為它的初始化值;第三個語句定義了名為 vp2 的 VicePresidents 變數,並且使用了 VicePresidents::SHERMAN 列舉量作為它的初始化值。
請注意,即使列舉量 SHERMAN 是列舉資料型別中唯一的成員,也必須加上它所屬的 enum 名稱作為字首。
以下是使用列舉量比較 prez 變數的if語句範例:if (prez == Presidents::ROOSEVELT) cout <<"Roosevelt is president! n";強型別列舉量和常規列舉量一樣,也是作為整數儲存的,但是,如果要檢索一個強型別列舉量底層的整數值,則必須使用強制轉換運算子。以下範例可以將 Presidents::ROOSEVELT 列舉量底層的整數值賦值給變數 x:
int x = static_cast<int>(Presidents::ROOSEVELT);
以下是另外一個範例,它顯示了 Presidents::ROOSEVELT 和 Presidents::TAFT 列舉量的整數值:cout<<static_cast<int>(Presidents :: ROOSEVELT) << " " <<static_cast<int>(Presidents::TAFT) << endl;
在宣告強型別 enum 時,可以選擇性地指定任意整數資料型別作為底層型別。只要在 enum 名稱後面加上一個冒號(:),然後跟上所需的資料型別即可。例如,以下語句宣告了一個使用 char 資料型別作為其列舉量的 enum:enum class Day : char { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY };
以下語句顯示了另外一個範例。該語句宣告了一個名為 Water 的 enum,使用了 unsigned 作為其列舉量的資料型別。此外,還給列舉量賦值了。enum class Water : unsigned { FREEZING = 32, BOILING = 212 };
下面的程式演示了強型別列舉資料型別的用法:#include <iostream> using namespace std; enum class Presidents { MCKINLEY, ROOSEVELT, TAFT }; enum class VicePresidents { ROOSEVELT, FAIRBANKS, SHERMAN }; int main() { Presidents prez = Presidents::ROOSEVELT; VicePresidents vp1 = VicePresidents::ROOSEVELT; VicePresidents vp2 = VicePresidents::SHERMAN; cout << static_cast<int>(prez) << " " << static_cast<int>(vp1) << " " << static_cast<int> (vp2) << endl; return 0; }程式輸出結果:
10 2