C++枚舉類型
如果一個變量只有幾種可能的值,可以定義為枚舉(enumeration)類型。所謂“枚舉”是指將變量的值一一列舉出來,變量的值只能在列舉出來的值的范圍內。聲明枚舉類型用enum開頭。例如:
enum weekday{sun, mon, tue, wed, thu, fri, sat};
上面聲明了一個枚舉類型weekday,花括號中sun, mon, …, sat等稱為枚舉元素或枚舉常量。表示這個類型的變量的值只能是以上7個值之一。它們是用戶自己定義的標識符。
聲明枚舉類型的一般形式為:
enum 枚舉類型名{枚舉常量表列};
在聲明了枚舉類型之后,可以用它來定義變量。如:
weekday workday,week_end;
這樣,workday和week_end被定義為枚舉類型weekday的變量。
在C語言中,枚舉類型名包括關鍵字enum,以上的定義可以寫為:
enum weekday workday,week_end;
在C++中允許不寫enum,一般也不寫enum,但保留了C的用法。根據以上對枚舉類型weekday的聲明,枚舉變量的值只能是sun到sat之一。例如:
workday=mon; week_end=sun;
是正確的。也可以直接定義枚舉變量,如:
enum{sun, mon, tue, wed, thu, fri, sat} workday,week_end;
這些標識符并不自動地代表什么含義。
對枚舉類型的幾點說明:
對枚舉元素按常量處理,故稱枚舉常量。
枚舉元素作為常量,它們是有值的,C++編譯按定義時的順序對它們賦值為0,1,2,3,…。也可以在聲明枚舉類型時另行指定枚舉元素的值。
枚舉值可以用來做判斷比較。
一個整數不能直接賦給一個枚舉變量。
【例】口袋中有紅、黃、藍、白、黑5種顏色的球若干個。每次從口袋中任意取出3個球,問得到3種不同顏色的球的可能取法,輸出每種排列的情況。
#include <iostream>#include <iomanip>//在輸出時要用到setw控制符using namespace std;int main( ){ enum color {red,yellow,blue,white,black}; //聲明枚舉類型color color pri; //定義color類型的變量pri int i,j,k,n=0,loop; //n是累計不同顏色的組合數 for (i=red;i<=black;i++) //當i為某一顏色時 for (j=red;j<=black;j++) //當j為某一顏色時 if (i!=j) //若前兩個球的顏色不同 { for (k=red;k<=black;k++) //只有前兩個球的顏色不同,才需要檢查第3個球的顏色 if ((k!=i) && (k!=j)) //3個球的顏色都不同 { n=n+1;//使累計值n加1 cout<<setw(3)<<n; //輸出當前的n值,字段寬度為3 for (loop=1;loop<=3;loop++) //先后對3個球作處理 { switch (loop) //loop的值先后為1,2,3 { case 1: pri=color(i);break ; //color(i)是強制類型轉換,使pri的值為i case 2: pri=color(j);break ; //使pri的值為j case 3: pri=color(k);break ; //使pri的值為k default :break ; } switch (pri)//判斷pri的值,輸出相應的“顏色” { case red: cout<<setw(8)<<"red"; break; case yellow: cout<<setw(8)<<"yellow";break; case blue:cout<<setw(8)<<"blue"; break ; case white:cout<<setw(8)<<"white"; break ; case black:cout<<setw(8)<<"black"; break ; default : break ; } } cout<<endl; } } cout<<"total:"<<n<<endl; //輸出符合條件的組合的個數 return 0;}
運行結果如下:
1 red yellow blue 2 red yellow white 3 red yellow black┆┆┆58 black white red59 black white yellow60 black white bluetotal:60
不用枚舉常量,而用常數0代表“紅”,1代表“黃”……也可以。但顯然用枚舉變量更直觀,因為枚舉元素都選用了令人“見名知意”的標識符,而且枚舉變量的值限制在定義時規 定的幾個枚舉元素范圍如果賦予它一個其他的值,就會出現出錯信息,便于檢查。
C++ typedef 聲明新類型
在C++中,除了可以聲明結構體、共用體、枚舉等類型外,還可以用typedef聲明一個新的類型名來代替已有的類型如:
這樣,以下兩行等價:
這樣可以使熟悉FORTRAN的人能用INTEGER和REAL定義變量,以適應他們的習慣。
如果在一個程序中,整型變量是專門用來計數的,可以用COUNT來作為整型類型名:
typedef int COUNT; //指定用COUNT代表int型 COUNT i,j; //將變量i,j定義為COUNT類型
即int類型在程序中將變量i, j定義為COUNT類型,可以使人更一目了然地知道它們是用于計數的。
也可以聲明結構體類型:
typedef struct //注意在struct之前用了關鍵字typedef,表示是聲明新名{ int month; int day; int year;}DATE; //注意DATE是新類型名,而不是結構體變量名
所聲明的新類型名DATE代表上面指定的一個結構體類型。這樣就可以用DATE定義變量:
DATE birthday; DATE *p; //p為指向此結構體類型數據的指針
還可以進一步:
typedef int NUM[100]; //聲明NUM為整型數組類型,包含100個元素NUM n; //定義n為包含100個整型元素的數組typedef char *STRING; //聲明STRING為字符指針類型STRING p,s[10]; //p為字符指針變量,s為指針數組(有10個元素)typedef int (*POINTER)( ) //聲明POINTER為指向函數的指針類型,函數返回整型值POINTER p1, p2; // p1,p2為POINTER類型的指針變量
歸納起來,聲明一個新的類型名的方法是:
再以聲明上述的數組類型為例來說明:
習慣上常把用typedef聲明的類型名用大寫字母表示,以便與系統提供的標準類型標識符相區別。
關于typedef的幾點說明:
新聞熱點
疑難解答
圖片精選