列挙体も当然クラスのメンバに出来ます。
<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型 |
で扱えます。