Enum列挙変数の使い方

2021 ワード

Class Piece
{
public:
	typedef enum { colorless,white,black } pieceColor;
	enum pieceColor { colorless,white,black };//           ,        pieceColor。         ,         
	pieceColor m_color;//           
	bool SetPiece(POINT position,pieceColor color);//              
}

クラスの外で関数を呼び出す場合、関数内の変数を列挙してパラメータを渡す場合は、クラス名::列挙値でパラメータを渡す必要があります.
次のようになります.
Piece myPiece;
myPiece.SetPiece(position, Piece::color);

列挙タイプ初期値が定義されていない場合、デフォルトでは最初の要素に0が割り当てられ、後の要素は順次+1に割り当てられます.
定義時に任意のメンバーに初期値を割り当てることもできます.初期値が割り当てられていない場合は、デフォルト値を使用します.つまり、前の要素より1大きいです.
例えば、enum test{a=10,b,c=11,d,e}
各列挙変数の値は、a=10、b=11、c=11、d=12、e=13である
aは初期値10を付与し、bは初期値を持たないため、bのデフォルトはaより1大きい、すなわちb=11である.
cは初期値11を付与するので、c=11である.
dもeも初期値が付与されていないため、順次1,d=12,e=13を加算する
また、列挙には範囲がありますが、2つの範囲しかありません.列挙が範囲を超えない限り、エラーは報告されません.
列挙変数に負の値がない場合、範囲は[0,2 k-1]
列挙変数に負の値がある場合、範囲は[-2 k,2 k-1]
 
列挙変数を定義する場合は、メンバーまたは同じ列挙タイプの他のオブジェクトにのみ値を割り当てることができます.
次のようになります.
enum test { a = 10, b, c = 11, d, e }
test temp1 = 11;//  ,  test    int  
test temp2 = test(c);//  
test temp3 = test(11);//  ,    
test temp4 = test(1000000);//    ,        1000000,    

最後の2つの方法は、列挙タイプに対応する表現がない可能性が高いため、通常は使用しないでください.
 
#列挙タイプは、関数の戻り値として使用されます.
関数宣言にはenumキーが必要です.
enum ENUMtest { a, b, c, d, e };
int main(int argc, char** argv)
{
	enum ENUMtest fun();//       enum   
	int temp = fun();
	cout << temp << endl;
	system("PAUSE");
}
ENUMtest fun()//       enum   
{
	return ENUMtest(1);
}

同様:列挙タイプがクラスのメンバー関数として値を返す場合:
1.宣言にenumキーを追加するには
2.関数インプリメンテーションにクラス名を付けるには:列挙名
class A
{
	enum ENUMtest { a, b, c, d, e };
	enum ENUMtest testFun();//       enum   
};
A::ENUMtest testFun()//       enum   ,      ::   
{
	return ENUMtest(1);
}

テクニック:変数の数を列挙する
enum ENUMtest{a,b,c,d,e,count};
列挙変数が0からステップ1で増加する場合、
列挙変数に最後にcountを付ける限り、そのcountの値は列挙変数の数です.