C中的枚舉類型
enum 枚舉名{ 枚舉值表 };
在枚舉值表中應(yīng)羅列出所有可用值。這些值也稱為枚舉元素。
如:
enum weekday{ sun,mou,tue,wed,thu,fri,sat};
2. 枚舉變量的聲明
如同結(jié)構(gòu)和聯(lián)合一樣,枚舉變量也可用不同的方式聲明,即先定義后聲明,同時定義聲明或直接聲明。
設(shè)有變量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類型變量的取值只能是七天中的某一天。
枚舉名中的枚舉元素系統(tǒng)是按照常量來處理的,故叫枚舉常量,他們是不能進行普通的算術(shù)賦值的,但是你可以在聲明的時候進行賦值操作!
枚舉元素在全局作用域有效.
如:
void main()
{
enum weekday a,b,c;
a = sun;
b = wed;
}
C++中的枚舉類型(類和命名空間)
基本同C的枚舉類型,也就是說,在文件全局作用域定義的enum.在全局作用域有效.
但C++中,enum類中有作用域要求.
而在類中定義的enum類型在類中有效,并遵守類的權(quán)限(public,private,protected,友元)訪問規(guī)則,但在全局作用域中無效.
#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'
存取權(quán)限改成public就可以了.
可以看到,在枚舉類型這一塊,C++對C的兼容是多么的自然并容易理解.