Enum是枚举类型。
定义形式一:
Enum 枚举类型名
{枚举常量1(=0),
枚举常量2(=0),
……
}枚举变量1(,枚举变量2,……);
如
Enum weekday
{ Monday=0,Tuesday,Wednesday,Thursday,Friday=9,Saturday,Sunday
}today;
Weekday 为枚举类型名,today为枚举变量,大括号里面的Monday,Tuesday等都是枚举常量。其中,Monday为0,Tuesday为1,Wednesday=2,Thursday=3,Saturday=10,Sunday=11.
枚举类型还有另外一种定义形式,即省略类型名。
定义形式二:
Enum
{枚举常量1(=0),
枚举常量2(=0),
……
}枚举变量1(,枚举变量2,……);
如Enum
{ Monday=0,Tuesday,Wednesday,Thursday,Friday=9,Saturday,Sunday
}today;
虽然省略了类型名,但C++会自动给该枚举类型取一个类型名,形如__unamed_0000_1。
注意:
1.枚举常量的值不允许再修改。因为它是常量。如Monday=4;这是错的。
2.不能用整数给枚举变量赋值。
如today=0;这是错的。因为类型不匹配。应该改为:today=(weekday)0;
但如果枚举类型的定义形式为第二种形式,则today=(weekday)0也是错误的。原因很简单。因为weekday未定义。假设此时,C++给该枚举类型取的类型名为__unnamed_0000_1,那么,today=(__unnamed_0000_1)0;是否正确呢?
答案是否定的。
如果枚举类型定义在另一个类的定义中,则枚举变量,枚举常量都可以做为该类的成员变量。但是,枚举类型名是类的静态类型。
#include <iostream>
using namespace std;
class myclass
{
public:
enum weekday
{
monday=0,tuesday=1,wednesday,thursday,friday,saturday,sunday
}first,second;//枚举类型的第一种定义形式,枚举类型名为weekday。
};
int main()
{
myclass aclass;
aclass.first=myclass::monday;//枚举常量Monday作为类的成员变量
aclass.first=myclass::weekday::moday;//编译器警告:warning C4482: 使用了非标准扩展: 限定//名中使用了枚举“myclass::weekday”。不应该采取这种方法。
aclass.first=(myclass::weekday)0;// 整数赋给枚举变量。但是必须类型转化。适用于枚举变量的//的第一种定义形式。
}
调试环境为windowsxp+vs2008