enum枚举类型作为成员变量

来源:互联网 发布:剑网三正式版优化 编辑:程序博客网 时间:2024/06/05 04:54

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

 

原创粉丝点击