というふうに、宣言します。構造体の宣言の仕方と似ていますね。 上のように宣言した後、enum tag {zero, one, ....};
とすれば、変数a, b, cはenum tag型であると言うことになります。 ここで、変数a, b, cは最初に宣言した{ }の中の値しか取らない変数と言うことになります。 その値とは、0から始まり、1つずつ増えていく整数です。enum tag a, b, c;
というようにすれば、まずcatに0,dogに1,ratに2の値が割り付けられます。 そして、enum animal型の変数はこの3つの値しか取りません。 上の例では、aにdog(1)が代入されました。 また、この0から1ずつ増加する整数というのは、 だぶってもかまいません。間が飛んでもかまいません。enum animal {cat, dog, rat}; enum animal a; a = dog;
とすれば、cat=0, dog=1, rat=5, pig=6, man=7ということになります。 また、変数を一度に宣言してもかまいません。これも構造体と同じです。enum animal {cat, dog, rat = 5, pig, man}
では、実際にプログラムを作って確かめてみましょう。enum animal {cat, dog, pig} a, b;
さて、左のプログラムが実行されたとき
どのような結果になるか予想してみてください。
使い方は、何となくわかったでしょうか。
一体、こんなもの何の役に立つのだ?とお思いのあなた! これが結構便利なのです。 たとえば、第26章でやった エスケープ・シーケンスによる色づけを思い出してください。
psが30ならくろ、31なら赤、32なら緑...
何となくenum型で表せそうな気がしませんか。
では、その例をプログラムしてみましょう。
左のプログラムは、マクロなどを使ってもう少し
すっきり書き直すことができます。
色づけが終わったら必ず白に戻してください。
でないとプロンプトまで色が付いてしまいます。
enum型のenumとは英語のenumerate(列挙する)から きています。また、{ }の中の単語?を 「列挙子」といいます。列挙子は整数値として 扱えますが、整数を列挙子に変換するには、 型キャストが必要です。(普通こんなことはしない。 型キャストの結果はどうなるかは不定) また、列挙型変数を宣言するときCでは
enum animal a, b;
というように書きましたがC++では
animal a, b;
と書くことができます。
C++については、
続編で解説する予定です。
Update Dec/22/1996 By Y.Kumei