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的值就是枚举变量的数量