張掖市住房和城鄉(xiāng)建設(shè)局網(wǎng)站網(wǎng)絡(luò)營銷的網(wǎng)站建設(shè)
C++ 枚舉詳解
C++ 枚舉類型詳解
枚舉類型的定義格式為:
enum <類型名> {<枚舉常量表>};
- 關(guān)鍵字enum——指明其后的標識符是一個枚舉類型的名字
- 枚舉常量表——由枚舉常量構(gòu)成?!懊杜e常量"或稱"枚舉成員”,是以標識符形式表示的整型量,表示枚舉類型的取值。枚舉常量表列出枚舉類型的所有取值,各枚舉常量之間以","間隔,且必須各不相同。取值類型與條件表達式相同
enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定義枚舉類型color_set1
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定義枚舉類型week
枚舉常量代表該枚舉類型的變量可能取的值,編譯系統(tǒng)為每個枚舉常量指定一個整數(shù)值,默認狀態(tài)下,這個整數(shù)就是所列舉元素的序號,序號從0開始。
可以在定義枚舉類型時為部分或全部枚舉常量指定整數(shù)值,在指定值之前的枚舉常量仍按默認方式取值,而指定值之后的枚舉常量按依次加1的原則取值。 各枚舉常量的值可以重復
enum fruit_set {apple, orange, banana=1, peach, grape}
//枚舉常量apple=0,orange=1, banana=1,peach=2,grape=3enum week {Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat};
//枚舉常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分別為7、1、2、3、4、5、6
枚舉常量只能以標識符形式表示,而不能是整型、字符型等文字常量
enum letter_set {'a','d','F','s','T'}; //枚舉常量不能是字符常量
enum year_set{2000,2001,2002,2003,2004,2005}; //枚舉常量不能是整型常量
允許的賦值操作
color3=RED; //將枚舉常量值賦給枚舉變量
color4=color3; //相同類型的枚舉變量賦值,color4的值為RED
int i=color3; //將枚舉變量賦給整型變量,i的值為1
int j=GREEN; //將枚舉常量賦給整型變量,j的值為0
允許的關(guān)系運算有:==、<、>、<=、>=、!=等
//比較同類型枚舉變量color3,color4是否相等
if (color3==color4) cout<<"相等";
//輸出的是變量color3與WHITE的比較結(jié)果,結(jié)果為1
cout<< color3<WHITE;
枚舉變量可以直接輸出,輸出的是變量的整數(shù)值
cout<< color3; //輸出的是color3的整數(shù)值,即RED的整數(shù)值1
#include<iostream>
#include<iomanip>
using namespace std;
int main(){enum color_set {red,yellow,blue,white,black}; //聲明枚舉類型colorcolor_set color; int i,j,k,counter=0,loop; //counter是累計不同顏色的組合數(shù)for(i=red;i<=black;i++) {for(j=red;j<=black;j++) {if(i!=j){ //前兩個球顏色不同for(k=red;k<=black;k++)if(k!=i&&k!=j){ //第三個球不同于前兩個,滿足要求counter++;if((counter)%22==0){ //每屏顯示22行cout<<"請按回車鍵繼續(xù)";cin.get();}cout<<setw(15)<<counter;/*下面輸出每種取法,一行為一種取法的三個顏色*/for(loop=1;loop<=3;loop++){switch(loop){case 1: color=(color_set) i; break; //第一個是icase 2: color=(color_set) j; break; //第二個是jcase 3: color=(color_set) k; break; //第三個是k}switch(color){case red: cout<<setw(15)<<"red"; break;case yellow:cout<<setw(15)<<"yellow";break;case blue: cout<<setw(15)<<"blue"; break;case white: cout<<setw(15)<<"white"; break;case black: cout<<setw(15)<<"black"; break;}}cout<<endl; //輸出一種取法后換行}}}}cout<<"共有:"<<counter<<"種取法"<<endl;return 0;
}
- 枚舉變量可以直接輸出,但不能直接輸入。如:cout >> color3; //非法
- 不能直接將常量賦給枚舉變量。如: color1=1; //非法
- 不同類型的枚舉變量之間不能相互賦值。如: color1=color3; //非法
- 枚舉變量的輸入輸出一般都采用switch語句將其轉(zhuǎn)換為字符或字符串;枚舉類型數(shù)據(jù)的其他處理也往往應(yīng)用switch語句,以保證程序的合法性和可讀性