C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のenum(列挙型)とは?基本の使い方を徹底解説

C++のenum(列挙型)とは?基本の使い方を徹底解説

列挙型(enumerated type)は、あらかじめ定義された値の範囲の中から、いずれか一つの値だけを持つことができるユーザー定義型です。

プログラミングでは、変数が特定の値の集合の中の一つの値しか格納できないようにしたい場合によく使われます。たとえば、変数に「曜日」だけを格納したい場合などに、列挙型が役立ちます。

この記事では、C++における列挙型の基礎知識、定義方法、コードでの実際の使い方を、サンプルコードとともにわかりやすく解説します。読み終える頃には、C++のenumを使いこなせるようになっているはずです。

C++におけるenum(列挙型)の基本

列挙型(enum型)は、取りうる値が固定された範囲に限定されたカスタムデータ型を作成するために使われます。ユーザー定義型の一種です。

C++でenumを定義するには、enumキーワードを使用します。基本的な構文は以下の通りです。

enum name {
    firstValue,
    secondValue,
    thirdValue,
    fourthValue
};

この構文の各要素を分解して見てみましょう。

  • enum:列挙型を作成することをコンパイラに指示します。
  • name:列挙型に付ける名前です。
  • firstValue〜fourthValue:列挙型に割り当てる値(列挙子)です。これらの値は波括弧 {} の中に記述します。

また、enumのデフォルト値を変更することも可能です。通常、列挙子には先頭から0、1、2…という整数が自動的に割り当てられますが、明示的に値を指定すれば、任意の整数値を持たせることができます。

enum name {
    firstValue = 0,
    secondValue = 1
};

この構文では、enumは2つの値を持ちます。firstValueには0、secondValueには1が割り当てられています。

enumを使うメリットは、変数が取りうる値を明確に定義できる点にあります。たとえば、変数に「曜日」だけを格納させたい場合、enumを宣言しておけば、その変数が曜日以外の値を持たないことがコード上で一目瞭然になります。

列挙型の宣言方法

ここで、ドーナツ店のレジ担当者が注文を記録し、ドーナツの料金を計算するアプリケーションを作成するとしましょう。

お店で販売しているドーナツの種類は限られているため、レジ担当者には在庫にあるドーナツの注文だけを記録できるようにしたいところです。プログラムで扱いたいフレーバーは、「ラズベリー」「ストロベリー」「パウダード(粉砂糖がけ)」「チョコレート」「シナモン」の5種類です。

これはまさにenumが活躍する場面です。プログラムで処理できる注文を上記のフレーバーに限定したいので、enumを使うのが良いでしょう。以下のようにC++のenumを宣言できます。

enum flavors {
    Raspberry,
    Strawberry,
    Powdered,
    Chocolate,
    Cinnamon
};

このコードでは、5つの値を持つ「flavors」という名前のenumを宣言しています。これにより、このenumから変数に値を代入する際、変数が格納できるのはenum内で宣言された値だけになります。

flavors型の値だけを格納できる変数を宣言するには、次のような構文を使います。

enum flavors orderFlavor;

こうして宣言した変数orderFlavorは、flavors列挙型の値のみを格納できます。

列挙型の使い方

enumの宣言ができたら、実際にコードの中で使ってみましょう。再びドーナツ店の例を使って、C++プログラムでのenumの使い方を見ていきます。

レジ担当者が注文を記録できるプログラムを作っているとします。ちょうどラズベリードーナツの注文を受け付けたので、プログラム上でその注文を作成したいと思います。以下のコードで実現できます。

#include <iostream>

using namespace std;

enum flavors {
    Raspberry,
    Strawberry,
    Powdered,
    Chocolate,
    Cinnamon
};

int main() {
    enum flavors orderFlavor;
    orderFlavor = Raspberry;

    cout << "Donut ordered: 1x Raspberry" << endl;

    return 0;
}

このコードを実行すると、次の出力が得られます。

Donut ordered: 1x Raspberry

コードの内容を順番に見ていきましょう。まず、ドーナツ店で販売しているフレーバーを格納する「flavors」というenumを宣言しています。

次に、顧客が注文したドーナツの種類を記録する変数「orderFlavor」を宣言します。この変数にはflavors列挙型の値しか代入できません。続く行では、orderFlavorにRaspberryを代入しています。

最後に、"Donut ordered: 1x "という文字列と、orderFlavorに対応するフレーバー名をコンソールに出力します。

なお、enumの値は内部的には整数として扱われるため、そのまま出力すると「0」などの数値が表示されます。フレーバーの名前を表示するには、上記のように条件分岐や配列などを使って対応する文字列を出力する必要があります。

この例からもわかるように、enumを使うとコードの可読性が向上します。orderFlavor変数がflavors列挙型の値しか格納できないことが明確になり、より複雑なプログラムでは、管理すべき変数が増えるぶん、enumを使うメリットはさらに大きくなります。

enumのデフォルト値を変更する

さらに、enumの各値に特定のデフォルト値を割り当てることもできます。たとえば、特定のドーナツの価格を返すプログラムを作りたいとしましょう。顧客が注文できるドーナツの種類は限られているため、ここでもenumが役立ちます。

ただし、C++のenumに割り当てられる値は整数である必要があるため、価格を扱う場合は少し工夫が必要です。ここでは、価格をセント単位の整数で管理する方法を見てみましょう。

#include <iostream>

using namespace std;

enum prices {
    Raspberry = 200,
    Strawberry = 200,
    Powdered = 175,
    Chocolate = 190,
    Cinnamon = 220
};

int main() {
    enum prices orderPrice;
    orderPrice = Raspberry;

    cout << "Donut price: $" << orderPrice / 100.0 << endl;

    return 0;
}

このコードを実行すると、次の出力が得られます。

Donut price: $2

この例では、enumの各値にデフォルト値(価格)を割り当てています。enumの値を参照すると、列挙子の名前ではなく、割り当てられた値が返されます。たとえばChocolateを参照すれば190が、Cinnamonを参照すれば220が返されます。

main関数では、まずprices列挙型を使って取りうる値を制限した変数「orderPrice」を宣言します。そして、prices列挙型でRaspberryに対応する値をorderPriceに代入しています。

その後、"Donut price: $"という文字列と、orderPriceに格納されている価格をコンソールに出力します。この例では、顧客が注文したのは2.00ドル相当のラズベリードーナツなので、出力結果は「Donut price: $2」となります。

まとめ

enum(列挙型)は、固定された値の集合だけを格納できるデータ型を作成するために使われます。たとえば、季節を格納する列挙型なら、「春」「夏」「秋」「冬」の4つの値だけを持つことになります。変数が特定の値の集合の中の一つの値しか持たないようにしたい場合に、enumは非常に便利です。

この記事では、C++でenumを作成する方法、enumの使い方、enumのデフォルト値の変更方法について、サンプルコードとともに解説しました。これで、C++でenumを使い始めるための知識はバッチリです!

  1. C++の列挙型(enum)の使い方をわかりやすく解説

    列挙型(enum)とは列挙型は、C/C++言語におけるユーザー定義型の一つです。整数定数に分かりやすい名前を付けるために使用され、プログラムの可読性と保守性を大きく向上させます。列挙型を宣言するには、キーワード「enum」を使用します。列挙型の基本構文enumの基本的な書式は以下の通りです。enum 列挙型名{定数1, 定数2, ....... };各要素の意味は次のようになります。列挙型名 − ユーザーが自由に付けることのできる任意の名前です。定数1、定数2 − 列挙型に含まれる識別子(値)です。列挙型変数の定義方法enumキーワードは、列挙型の変数を定義する際にも使用できます。主な定義方法

  2. C#の列挙型(Enum)とは?基本的な使い方をサンプルコードで解説

    C#における列挙型(Enum)は、年、製品名、月、季節など、関連する一連の名前付き定数をひとまとめにして格納するためのデータ型です。列挙型の各定数にはデフォルトで整数値が割り当てられ、最初の要素は 0 から始まり、以降は順に 1 ずつ増加していきます。列挙型は定数の集合が固定されているため、ループ処理などで簡単に走査できるのも大きな特徴です。列挙型の定義例たとえば、車種を表す列挙型は次のように定義できます。public enum Vehicle { Car, Bus, Truck }この場合、Car = 0、Bus = 1、Truck = 2 という整数値が自動的に割り当てられます。サンプルプ