站長資訊網
        最全最豐富的資訊網站

        C++ 枚舉類型詳解

        枚舉類型的定義:枚舉類型(enumeration)是 C++ 中的一種派生數據類型,它是由用戶定義的若干枚舉常量的集合。

        定義格式:枚舉類型的定義格式為:

        enum <類型名> {<枚舉常量表>};

        格式說明:

        • 關鍵字enum——指明其后的標識符是一個枚舉類型的名字。
        • 枚舉常量表——由枚舉常量構成。”枚舉常量”或稱”枚舉成員”,是以標識符形式表示的整型量,表示枚舉類型的取值。枚舉常量表列出枚舉類型的所有取值,各枚舉常量之間以”,”間隔,且必須各不相同。取值類型與條件表達式相同。

        應用舉例:

        enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定義枚舉類型color_set1  enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定義枚舉類型week

        重要提示:

        枚舉常量代表該枚舉類型的變量可能取的值,編譯系統為每個枚舉常量指定一個整數值,缺省狀態下,這個整數就是所列舉元素的序號,序號從0開始。 可以在定義枚舉類型時為部分或全部枚舉常量指定整數值,在指定值之前的枚舉常量仍按缺省方式取值,而指定值之后的枚舉常量按依次加1的原則取值。 各枚舉常量的值可以重復。例如:

        enum fruit_set {apple, orange, banana=1, peach, grape}  //枚舉常量apple=0,orange=1, banana=1,peach=2,grape=3。
        enum 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}; //枚舉常量不能是整型常量

        可改為以下形式則定義合法:

        enum letter_set {a, d, F, s, T};  enum year_set{y2000, y2001, y2002, y2003, y2004, y2005};

        枚舉變量的使用

        定義枚舉類型的主要目的是:增加程序的可讀性。枚舉類型最常見也最有意義的用處之一就是用來描述狀態量,這點將在第9章 輸入輸出流類看到。

        定義格式:定義枚舉類型之后,就可以定義該枚舉類型的變量,如:

        color_set1 color1, color2;

        亦可類型與變量同時定義(甚至類型名可省),格式如下:

        enum {Sun,Mon,Tue,Wed,Thu,Fri,Sat} weekday1, weekday2;

        相關操作

        枚舉變量的值只能取枚舉常量表中所列的值,就是整型數的一個子集。

        枚舉變量占用內存的大小與整型數相同。

        枚舉變量只能參與賦值和關系運算以及輸出操作,參與運算時用其本身的整數值。例如,設有定義:

        enum color_set1 {RED, BLUE, WHITE, BLACK} color1, color2;  enum color_set2 { GREEN, RED, YELLOW, WHITE} color3, color4;

        則允許的賦值操作如下:

        color3=RED;           //將枚舉常量值賦給枚舉變量  color4=color3;        //相同類型的枚舉變量賦值,color4的值為RED  int  i=color3;        //將枚舉變量賦給整型變量,i的值為1  int  j=GREEN;         //將枚舉常量賦給整型變量,j的值為0

        允許的關系運算有:==、<、>、<=、>=、!=等,例如:

        //比較同類型枚舉變量color3,color4是否相等  if (color3==color4) cout<<"相等";  //輸出的是變量color3與WHITE的比較結果,結果為1  cout<< color3<WHITE;

        枚舉變量可以直接輸出,輸出的是變量的整數值。例如:

        cout<< color3;         //輸出的是color3的整數值,即RED的整數值1

        實例

        口袋中有紅、黃、藍、白、黑五種顏色的球若干個,每次從口袋中取三個不同顏色的球,統計并輸出所有的取法。

        分析:由于球只能是五種顏色之一,故可用枚舉類型表示球的顏色。設取出的球為i、j、k,根據題意,i、j、k分別可以有五種取值,且i≠j≠k。可以用窮舉法,逐個檢驗每一種可能的組合,從中找出符合要求的組合并輸出。

        實例

        #include<iostream> #include<iomanip> using namespace std; int main(){ enum color_set {red,yellow,blue,white,black}; //聲明枚舉類型color color_set color; int i,j,k,counter=0,loop; //counter是累計不同顏色的組合數 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<<"請按回車鍵繼續"; cin.get(); } cout<<setw(15)<<counter; /*下面輸出每種取法,一行為一種取法的三個顏色*/ for(loop=1;loop<=3;loop++){ switch(loop){ case 1: color=(color_set) i; break; //第一個是i case 2: color=(color_set) j; break; //第二個是j case 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語句將其轉換為字符或字符串;枚舉類型數據的其他處理也往往應用switch語句,以保證程序的合法性和可讀性。
        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 2021精品国产综合久久| 亚洲精品自产拍在线观看动漫| 97精品伊人久久大香线蕉app| 久久精品不卡| 久久九九亚洲精品| 国产精品伦一区二区三级视频| 四虎国产精品成人| 国产精品视频全国免费观看| 国产精品久久永久免费| 久久99精品国产自在现线小黄鸭| 日韩精品无码Av一区二区| 国产99久久久国产精品~~牛| 精品国产第一国产综合精品 | 亚洲精品无码精品mV在线观看| 国产一区二区精品久久凹凸 | 国产精品ⅴ无码大片在线看| 亚洲人午夜射精精品日韩| 精品国产午夜肉伦伦影院| 91精品无码久久久久久五月天| 91在线视频精品| 国产精品99久久99久久久| 国内揄拍高清国内精品对白| 热re99久久精品国99热| 自拍偷自拍亚洲精品被多人伦好爽| 久久91这里精品国产2020| 国产精品自在欧美一区 | 亚洲?V无码乱码国产精品| 久久精品国产欧美日韩| AAA级久久久精品无码区| 中文字幕亚洲综合精品一区 | 国产精品99久久久久久人| 国产精品亚洲片在线| 精品亚洲成a人片在线观看| 无码人妻精品一区二区| 亚洲国产精品无码久久久秋霞2 | 国产精品毛片无遮挡| 国产成人精品日本亚洲| 成人区精品一区二区不卡 | 久久99精品久久久久久野外| 国产精品午夜无码AV天美传媒| 成人一区二区三区精品|