C++中的enum淺談

千度尋發表於2017-09-05

一、基本語法

1.1 基本的列舉定義形式

#include <iostream>
using namespace std;

enum Weekend{   //定義星期的列舉
    Monday = 1,
    Thuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
};

int main() {
    cout << Weekend::Monday << endl;       //使用形式一
    cout << Thuesday << endl;              //使用形式二
    Weekend weekend= Weekend::Wednesday;   //weekend 仍然為列舉型別
    // weekend = 3;                        //error, weekend 不是變數,仍然為列舉型別
    cout << weekend<< endl;
    return 0;
}

//輸出
 1
 2
 3

1.2 類中的列舉定義形式

#include <iostream>
using namespace std;

class TestEnum {
public:
    enum Weekend {
        Monday = 1,
        Thuesday,   //編號會自動加一
        Wednesday,
        Thursday ,
        Friday,
        Saturday,
        Sunday
    };

    void func(Weekend weekend) {
        switch (weekend)
        {
        case Monday:
            cout << Monday << endl;
            break;
        case Thuesday:
            cout << Thuesday << endl;
            break;
        case Wednesday:
            cout << Wednesday << endl;
            break;
        case Thursday:
            cout << Thursday << endl;
            break;
        case Friday:
            cout << Friday << endl;
            break;
        case Saturday:
            cout << Saturday << endl;
            break;
        case Sunday:
            cout << Sunday << endl;
            break;
        }
    }
};


int main() {
    cout << TestEnum::Weekend::Monday << endl;   //使用::操作符獲得類中的列舉
    cout << TestEnum::Thuesday << endl;
    TestEnum test;
    test.func(TestEnum::Thursday);              //可以將列舉型別當做函式的引數
    return 0;
}

//輸出
 1
 2
 4

二、列舉的優勢

  1. 避免書寫程式碼時候產生不可思議的數,如上面的程式碼我們可以通過使用列舉中的Monday來替代程式碼中的“1”,從而使得程式碼更具有可讀性。
  2. 列舉不是變數,因此其不會佔用記憶體,同時也可以用作陣列的下標等其他地方如int s[Thuesday]。
  3. 在函式的引數中使用列舉可以很好的限制使用者的輸入。如func(Weekend weekend)可以使得輸入的引數在期望的範圍內。

相關文章