06:switch文と列挙型(enum class)

はじめに

この章では、複数の選択肢から1つを選んで処理を分ける switch 文と、C++における列挙型(enum class)について学びます。


switch文の基本的な使い方(06_switch_basic.cpp)

#include <iostream>
using namespace std;

int main() {
    int level;
    cout << "レベル(1〜3)を入力:";
    cin >> level;

    switch (level) {
        case 1:
            cout << "初級です。" << endl;
            break;
        case 2:
            cout << "中級です。" << endl;
            break;
        case 3:
            cout << "上級です。" << endl;
            break;
        default:
            cout << "範囲外です。" << endl;
            break;
    }
    return 0;
}

C言語におけるenumの使い方(06_enum_c_style.cpp)

#include <iostream>
using namespace std;

enum Rank { Gold = 1, Silver, Bronze };

int main() {
    Rank rank = Silver;

    switch (rank) {
        case Gold:
            cout << "金賞" << endl; 
            break;
        case Silver:
            cout << "銀賞" << endl;
            break;
        case Bronze:
            cout << "銅賞" << endl;
            break;
        default:
            cout << "参加賞" << endl;
            break;
    }
    return 0;
}

C++の列挙型:enum class

C++にはenum classという列挙型が用意されています。 enum class は、型の安全性と大規模開発でのミス防止を重視した設計です。 小規模コードでは煩雑に感じるかもしれませんが、チーム開発や複雑な設計で力を発揮します。

通常の enum と enum class の違い
enum Rank { Gold = 1, Silver, Bronze };
enum class Rank { Gold = 1, Silver, Bronze };
ここでいうRank とは何か?

enum class と switch文の組み合わせ(06_enum_switch.cpp)

#include <iostream>
using namespace std;

enum class Rank { Gold = 1, Silver, Bronze };

int main() {
    Rank rank = Rank::Silver;

    switch (static_cast<int>(rank)) {
        case 1:
            cout << "金賞" << endl;
            break;
        case 2:
            cout << "銀賞" << endl;
            break;
        case 3:
            cout << "銅賞" << endl;
            break;
        default:
            cout << "参加賞" << endl;
            break;
    }
    return 0;
}
static_cast(rank) とは?

理解度チェック

問題1(06_switch_case.cpp)

次のコードの出力は?

#include <iostream>
using namespace std;

int main() {
    int rank = 2;

    switch (rank) {
        case 1: cout << "金賞" << endl; break;
        case 2: cout << "銀賞" << endl; break;
        case 3: cout << "銅賞" << endl; break;
        default: cout << "参加賞" << endl; break;
    }
    return 0;
}
正解・解説を見る
銀賞

問題2(06_day_of_week.cpp)

1〜7の数値を受け取り、対応する曜日を表示するプログラムを作成しなさい。

解答例を見る
// 06_day_of_week.cpp
#include <iostream>
using namespace std;

int main() {
    int day;
    cout << "曜日番号(1〜7)を入力:";
    cin >> day;

    switch (day) {
        case 1: cout << "日曜日" << endl; break;
        case 2: cout << "月曜日" << endl; break;
        case 3: cout << "火曜日" << endl; break;
        case 4: cout << "水曜日" << endl; break;
        case 5: cout << "木曜日" << endl; break;
        case 6: cout << "金曜日" << endl; break;
        case 7: cout << "土曜日" << endl; break;
        default: cout << "無効な番号です。" << endl; break;
    }
    return 0;
}

まとめ