★列挙体★


列挙体も当然クラスのメンバに出来ます。

<sample program cpp056-01>

#include <iostream>

class Field {
public:

    enum {
        FLOOR,
        WALL,
    };

private:

};

int main()
{   
    int ground;

    ground = Field::FLOOR;

    return 0;
}

publicで宣言すれば、所属を書く事でどこからでも参照出来ます。


これで普通に使えると思いますが、これまで無名の列挙体しか書いてきませんでしたので、少し説明をしようと思います。

※特にC++での使い方と言う訳ではありません。

元々列挙体は構造体と同じようにタグ名が付けられます。

enum Field {
    FLOOR,
    WALL,
};

Fieldと言うタグ名を付けた列挙体です。

構造体と同じように実体も作れます。

この場合の型は、

enum Field型

になります。

<sample program cpp056-02>

#include <iostream>

enum Field {
    FLOOR,
    WALL,
};

int main()
{   
    enum Field field;

    field = FLOOR;

    return 0;
}

代入できるのは列挙体で宣言した定数です。

他の型の数値を入れようとすると、

<sample program cpp056-02>

#include <iostream>

enum Field {
    FLOOR,
    WALL,
};

int main()
{   
    enum Field field;

    field = FLOOR;

    field = 3;

    return 0;
}

<コンパイル結果>

error C2440: '=': 'int' から 'Field' に変換できません。
note: 列挙型への変換には static_cast、C スタイル キャストまたは関数スタイル キャストが必要です。

エラーになりました。


C言語では、

enum Field型

ですが、C++では「enmu」は省略可能ですので、

Field型

でも大丈夫です。

C言語の場合も構造体と同じようにtypedefを使えば、

typedef enum {
    FLOOR,
    WALL,
} Field;

Field型

で扱えます。


次へ

戻る

目次へ