C/C++中的枚举类型

C/C++中的枚举类型

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的兼容是多么的自然并容易理解.

你可能感兴趣的:(C/C++中的枚举类型)