【C++】列挙タイプとその用法
2548 ワード
C++には多くの組み込みデータ型が含まれています.しかし、私たちがやりたいことにとって、これらのタイプは時には足りないことがあります.したがって,C++はプログラマが独自のデータ型を作成することを可能にする.これらのデータ型は、ユーザー定義データ型と呼ばれます.
最も簡単なユーザー定義データ型は、列挙タイプ(Enumerated Type)かもしれません.列挙タイプの各可能な値は、シンボル定数(列挙器と呼ばれる)として定義されます.
一、どうして列挙するのですか.
その文法を知る前に、列挙のどのような用途を見て、学ぶ必要がありますか?実は列挙はとても実用的なツールで、主にコードの読書の方面に体現しています.
このような場面を想定すると、1つの項目に千行以上、一定の定数タイプがあり、いくつかの固定的な値しか取れません.書くときに図の便利さのために、色、状態など、数字で表すことができます.これは便利で、メモリを節約しますが、1ヶ月後にこのコードを理解するのは容易ではありません.
さらに一歩下がって、色を例にとると、7、8色を使うこともありますが、数字で表すと、対応も極めて不便で、半日考えなければなりません.このとき、色が名前で表すと、メモリの中では数字で、ずっと気持ちがいいです.
二、文法
1定義
C++では、列挙タイプはenumキーで定義されます.たとえば、色タイプを定義します.
カッコ内には、カンマで区切られたすべての可能な値(列挙器)があります.カッコの最後にはセミコロンが必要です.
注:列挙タイプが定義されると、列挙器はグローバル定数に相当するため、一般的な列挙器の名前には接頭辞と大文字が必要で、他の変数名と競合しないようにします.
2使用
以上のコードは4と0を出力します.デフォルトでは、列挙器の値は0,1,2の順です.もちろん、各列挙器の値を明示的に定義することもできる
1つの列挙器の値が与えられると、次の列挙器はデフォルトで1を加算します.同時に、2つの列挙器に同じ値を与えることもできます.この場合、この2つの列挙器は完全に同じで、交換することができます.名前だけが違います.
三、その他の用例
特定の事前定義された状態のセットを表す必要がある場合、列挙タイプはコードの可読性に非常に有用である.
たとえば、関数内部にエラーが発生した場合、関数は通常、エラーコードを表すために呼び出し元に整数を返します.通常、小さな負数は、異なる可能性のあるエラーコードを表すために使用されます.例:
しかし、このような数字を使うのはよく霧の中にある.1つの代替方法は、列挙タイプを使用することです.
これは、整数戻り値を使用するよりも読みやすく、理解しやすいです.この関数を使用すると、より便利になります.
最後に、私たちがよく使うブールタイプは、実は列挙タイプの特例にすぎず、列挙タイプはブールタイプの用途をより大きく豊かにしています.
最も簡単なユーザー定義データ型は、列挙タイプ(Enumerated Type)かもしれません.列挙タイプの各可能な値は、シンボル定数(列挙器と呼ばれる)として定義されます.
一、どうして列挙するのですか.
その文法を知る前に、列挙のどのような用途を見て、学ぶ必要がありますか?実は列挙はとても実用的なツールで、主にコードの読書の方面に体現しています.
このような場面を想定すると、1つの項目に千行以上、一定の定数タイプがあり、いくつかの固定的な値しか取れません.書くときに図の便利さのために、色、状態など、数字で表すことができます.これは便利で、メモリを節約しますが、1ヶ月後にこのコードを理解するのは容易ではありません.
さらに一歩下がって、色を例にとると、7、8色を使うこともありますが、数字で表すと、対応も極めて不便で、半日考えなければなりません.このとき、色が名前で表すと、メモリの中では数字で、ずっと気持ちがいいです.
二、文法
1定義
C++では、列挙タイプはenumキーで定義されます.たとえば、色タイプを定義します.
enum Color
{
COLOR_BLACK,
COLOR_RED,
COLOR_BLUE,
COLOR_GREEN,
COLOR_WHITE,
COLOR_CYAN,
COLOR_YELLOW,
COLOR_MAGENTA,
};
カッコ内には、カンマで区切られたすべての可能な値(列挙器)があります.カッコの最後にはセミコロンが必要です.
注:列挙タイプが定義されると、列挙器はグローバル定数に相当するため、一般的な列挙器の名前には接頭辞と大文字が必要で、他の変数名と競合しないようにします.
2使用
Color c1(COLOR_WHITE);
Color c2 = COLOR_BLACK;
std::cout << c1 << endl;
std::cout << c2 << endl;
以上のコードは4と0を出力します.デフォルトでは、列挙器の値は0,1,2の順です.もちろん、各列挙器の値を明示的に定義することもできる
enum Animal
{
ANIMAL_CAT = -3,
ANIMAL_DOG, // -2
ANIMAL_PIG, // -1
ANIMAL_HORSE = 5,
ANIMAL_GIRAFFE = 5, // ANIMAL_HORSE
ANIMAL_CHICKEN // 6
};
1つの列挙器の値が与えられると、次の列挙器はデフォルトで1を加算します.同時に、2つの列挙器に同じ値を与えることもできます.この場合、この2つの列挙器は完全に同じで、交換することができます.名前だけが違います.
三、その他の用例
特定の事前定義された状態のセットを表す必要がある場合、列挙タイプはコードの可読性に非常に有用である.
たとえば、関数内部にエラーが発生した場合、関数は通常、エラーコードを表すために呼び出し元に整数を返します.通常、小さな負数は、異なる可能性のあるエラーコードを表すために使用されます.例:
int readFileContents()
{
if (!openFile())
return -1;
if (!readFile())
return -2;
if (!parseFile())
return -3;
return 0; // success
}
しかし、このような数字を使うのはよく霧の中にある.1つの代替方法は、列挙タイプを使用することです.
enum ParseResult
{
SUCCESS = 0,
ERROR_OPENING_FILE = -1,
ERROR_READING_FILE = -2,
ERROR_PARSING_FILE = -3
};
ParseResult readFileContents()
{
if (!openFile())
return ERROR_OPENING_FILE;
if (!readFile())
return ERROR_READING_FILE;
if (!parsefile())
return ERROR_PARSING_FILE;
return SUCCESS;
}
これは、整数戻り値を使用するよりも読みやすく、理解しやすいです.この関数を使用すると、より便利になります.
if (readFileContents() == SUCCESS)
{
// do something
}
else
{
// print error message
}
最後に、私たちがよく使うブールタイプは、実は列挙タイプの特例にすぎず、列挙タイプはブールタイプの用途をより大きく豊かにしています.