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

同时还要注意枚举是有范围的,但只有两个范围。只要使用枚举不超出范围,就不会报错

若枚举变量中没有负值,则范围是[0,2k-1]

若枚举变量中有负值,则范围是[-2k,2k-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,但不推荐

最后两种方式通常不要这样使用,因为有的数值在枚举类型中很可能没有对应的表示。 

#枚举类型做函数返回值:

函数声明必须有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的值就是枚举变量的数量