C中的枚举类型
enum 枚举名{ 枚举值表 };
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
如:
enum weekday{ sun,mou,tue,wed,thu,fri,sat};
2. 枚举变量的声明
如同结构和联合一样,枚举变量也可用不同的方式声明,即先定义后声明,同时定义声明或直接声明。
设有变量a,b,c被声明为上述的weekday,可采用下述任一种方式:
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
或者为:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者为:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
例如:
该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被声明为weekday类型变量的取值只能是七天中的某一天。
枚举名中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,但是你可以在声明的时候进行赋值操作!
枚举元素在全局作用域有效.
如:
void main()
{
enum weekday a,b,c;
a = sun;
b = wed;
}
C++中的枚举类型(类和命名空间)
基本同C的枚举类型,也就是说,在文件全局作用域定义的enum.在全局作用域有效.
但C++中,enum类中有作用域要求.
而在类中定义的enum类型在类中有效,并遵守类的权限(public,private,protected,友元)访问规则,但在全局作用域中无效.
#include <stdio.h>
#include <stdio.h>
class A
{
private:
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
weekday day;
A():day(sun){}
};
int main()
{
A::weekday a = A::sun; //same as A::weekday b = A::weekday::sun;
return 0;
}
编译器会很生气,编译通不过
Error 1 error C2248: 'A::weekday' : cannot access private enum declared in class 'A'
存取权限改成public就可以了.
可以看到,在枚举类型这一块,C++对C的兼容是多么的自然并容易理解.