.NET開発者のためのブログメディア
C++でのenum(列挙型)の使い方とは?class指定方法や文字列変換方法を紹介!

- SE
- enumの使い方が知りたいです。
- PM
- enumの基本的な使い方やclass指定などを詳しく見ていきましょう。
目次
C++でのenum(列挙型)の使い方とは?
今回は、C++でのenum(列挙型)の使い方について説明します。
ここでは、以下について紹介します。
・基本的な使い方
・class指定
・文字列変換
・繰り返し処理
C++でのenum(列挙型)の使い方に興味のある方はぜひご覧ください。
基本的な使い方
C++でのenumの基本的な使い方を紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#include <iostream>
using namespace std;
// enumの定義
enum color {
Red, // 0
Blue, // 1
Green, // 2
Yellow, // 3
Purple, // 4
White, // 5
Black // 6
};
int main(void){
// enumの宣言
enum color c0, c1, c2;
// enumのメンバを代入
c0 = Red;
c1 = Green;
c2 = Purple;
// 結果出力
printf(" Red: %d\n", c0);
printf(" Green: %d\n", c1);
printf("Purple: %d\n", c2);
return 0;
}
|
実行結果は以下のようになります。数値を指定しなければ、0からインクリメントされて採番されます。
1
2
3
|
Red: 0
Green: 2
Purple: 4
|
値を指定したい場合は、以下のように記述することもできます。
1
2
3
4
5
6
7
8
9
|
enum color {
Red = 1, // 1
Blue, // 2
Green, // 3
Yellow, // 4
Purple, // 5
White, // 6
Black // 7
};
|
この場合は、1からインクリメントされて採番されます。実行結果は以下のようになります。
1
2
3
|
Red: 1
Green: 3
Purple: 5
|
少し特殊ですが、以下のように指定することもできます。この場合、指定した数値からインクリメントされていきます。
1
2
3
4
5
6
7
8
9
|
enum color {
Red = 1, // 1
Blue, // 2
Green = 4, // 4 指定した数値になる
Yellow, // 5 そのあとからインクリメントされる
Purple, // 6
White, // 7
Black // 8
};
|
実行結果は以下のようになります。指定した数値からインクリメントされていることが分かります。
1
2
3
|
Red: 1
Green: 4
Purple: 6
|
C++のenumはこのように使います。
class指定
C++でのenum classの使い方を紹介します。実際のソースコードを見てみましょう。
num はintとして扱われるため、以下のように代入できてしまい、型安全ではなく危険性がありました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <iostream>
using namespace std;
// enumの定義
enum color {
Red, // 0
Blue, // 1
Green, // 2
Yellow, // 3
Purple, // 4
White, // 5
Black // 6
};
int main(void){
// intへ代入(代入できてしまい、型安全ではなく危険性がある)
int val = Blue;
printf("val: %d\n", val);
return 0;
}
|
実行結果は以下のようになります。代入できてしまっていることが分かります。
1
|
val: 1
|
これに対して、enum class であれば、コンパイルエラーになるので、危険性を回避できます。
1
2
3
4
5
6
7
8
9
|
enum class color {
Red, // 0
Blue, // 1
Green, // 2
Yellow, // 3
Purple, // 4
White, // 5
Black // 6
};
|
この場合、以下のようなコンパイルエラーが発生します。
1
2
3
4
5
|
error: use of undeclared identifier 'Blue'; did you mean 'true'?
int val = Blue;
^~~~
true
1 error generated.
|
C++でのenum classの使い方を紹介しました。
文字列変換
C++でのenumの列挙定数を文字列に変換する方法を紹介します。実際のソースコードを見てみましょう。マクロの引数を文字列リテラルに置換するマクロ関数を使用します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <iostream>
#include <cstdio>
#define STR(var) #var // マクロの引数を文字列リテラルに置換するマクロ関数
using namespace std;
// enumの定義
enum color {
Red, // 0
Blue, // 1
Green, // 2
Yellow, // 3
Purple, // 4
White, // 5
Black // 6
};
int main(void){
// 結果出力
printf("%s: %d\n", STR(Red), Red);
printf("%s: %d\n", STR(Green), Green);
printf("%s: %d\n", STR(Purple), Purple);
return 0;
}
|
実行結果は以下のようになります。列挙定数が文字列に変換されていることが分かります。
1
2
3
|
Red: 0
Green: 2
Purple: 4
|
このように、C++ではenumの列挙定数を文字列に変換できます。
繰り返し処理
C++でのenum要素の繰り返し方法を紹介します。実際のソースコードを見てみましょう。operator ++を実装する必要があります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#include <iostream>
#include <cstdio>
using namespace std;
// enumの定義
enum color {
Begin,
Red = Begin, // 0
Blue, // 1
Green, // 2
Yellow, // 3
Purple, // 4
White, // 5
Black, // 6
End
};
void some_function(color c)
{
// switchによる分岐処理
switch( c )
{
case Red :
printf("Red %d\n", c);
break;
case Blue :
printf("Blue %d\n", c);
break;
case Green :
printf("Green %d\n", c);
break;
case Yellow :
printf("Yellow %d\n", c);
break;
case Purple :
printf("Purple %d\n", c);
break;
case White :
printf("White %d\n", c);
break;
case Black :
printf("Black %d\n", c);
break;
default :
printf("Default %d\n", c);
break;
}
}
// operator ++
color& operator ++ (color& c)
{
if (c == color::End) {
throw std::out_of_range("for color& operator ++ (color&)");
}
c = color(static_cast<std::underlying_type<color>::type>(c) + 1);
return c;
}
int main(void){
// enumの要素数分繰り返し
for (color c = color::Begin; c != color::End; ++c) {
some_function(c);
}
return 0;
}
|
実行結果は以下のようになります。この場合、連続する数値の場合のみ対応可能です。
1
2
3
4
5
6
7
|
Red 0
Blue 1
Green 2
Yellow 3
Purple 4
White 5
Black 6
|
enumの要素数分繰り返し処理が行えていることが分かります。
- SE
- enumは他にも、文字列変換や繰り返し処理もできるのですね。
- PM
- 実際に自分でコードを書いてenumを覚えてみましょう。
まとめ
いかがでしたでしょうか。C++でのenumの使い方について説明しました。
enumの基本的な使い方から、class指定方法や文字列変換方法、繰り返し処理について紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。
Search キーワード検索
Popular 人気の記事
reccomended おすすめ記事
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)