枚舉類型:
文法格式:
enum 枚舉類型名 {變數值列表};
例如:
enum Weekday{sun, mon, tue, wed, thu, fri, set};
聲明了枚舉類型後,就可以定義枚舉類型的變數了。定義枚舉變數的文法格式為:
enum 枚舉類型名 標示符;
或
枚舉類型名 標示符;
例如:
enum Weekday aday;
也可以把聲明枚舉類型和定義枚舉類型變數合為一步:
enum{變數列表} 標示符;
例如:
enum {sun, mon, tue, wed, thu, fri, set} aday;
變數aday的值只能是sun到sat之一
聲明枚舉類型時,變數值列表中的標示符是一些符號常量,每一個都對應一個確定的整數值。第一個符號常量的值為0,第二為1,以此類推。
也可以在聲明枚舉類型時自行制定符號常量的值,制定的值必須是整數。
例如:
enum Weekday{sun, mon , tue=5, wed, fri,sat};
其中,sun=0、mon=1、tue=5、wed=6、….sat=9.
不能把一個整數值直接賦值給一個枚舉類型的變數:
aday=2; //錯誤
但是可以通過強制類型轉換將整數賦值給枚舉類型的變數。
例如:
aday=(Weekday)2;
執行個體:
#include<iostream>
using namespace std;
void main()
{
enum Weekday{sun , mon , tue , wed , thu , fri , sat};
Weekday day1 , day2;
int in1,in2;
cout<< “請輸入兩個0到6之間的整數:”<<endl;
cin>>in1>>in2;
day1=(Weekday)in1;
day2=(Weekday)in2;
if(day1==day2)
{
cout<< “您輸入的都是”;
switch(day1)
{
case sun: cout<< “星期日”<<endl; break;
case mon: cout<< “星期一”<<endl; break;
case tue: cout<< “星期二”<<endl; break;
case wed: cout<< “星期三”<<endl; break;
case thu: cout<< “星期四”<<endl; break;
case fri: cout<< “星期五”<<endl; break;
case sat: cout<< “星期六”<<endl; break;
}
}
else
{
cout<< “您輸入的兩天分別是:”;
switch(day1)
{
case sun: cout<< “星期日”<<endl; break;
case mon: cout<< “星期一”<<endl; break;
case tue: cout<< “星期二”<<endl; break;
case wed: cout<< “星期三”<<endl; break;
case thu: cout<< “星期四”<<endl; break;
case fri: cout<< “星期五”<<endl; break;
case sat: cout<< “星期六”<<endl; break;
}
switch(day2)
{
case sun: cout<< “星期日”<<endl; break;
case mon: cout<< “星期一”<<endl; break;
case tue: cout<< “星期二”<<endl; break;
case wed: cout<< “星期三”<<endl; break;
case thu: cout<< “星期四”<<endl; break;
case fri: cout<< “星期五”<<endl; break;
case sat: cout<< “星期六”<<endl; break;
}
}
}
一道面試題:
下面程式碼片段的輸出是:
enum{
A ,B , C = 1 ,D,
};
std::cout<<B<< ‘ ’<<D<<std::endl;
A 1 1 B 1 2 C 2 1 D 2 2
答案:B
預設下”接下來的枚舉子取值是前面一個枚舉子的取值+1“。既然這兩個枚舉子沒有顯式賦值,那麼就按照預設規則辦事,所以B==1,D==2 從這個例子也可以看出,同一枚舉中枚舉子的取值不需要唯一。