講解C++中的枚舉類型以及聲明新類型的方法
C++枚舉類型
如果一個(gè)變量只有幾種可能的值,可以定義為枚舉(enumeration)類型。所謂“枚舉”是指將變量的值一一列舉出來,變量的值只能在列舉出來的值的范圍內(nèi)。聲明枚舉類型用enum開頭。例如:
enum weekday{sun, mon, tue, wed, thu, fri, sat};
上面聲明了一個(gè)枚舉類型weekday,花括號(hào)中sun, mon, …, sat等稱為枚舉元素或枚舉常量。表示這個(gè)類型的變量的值只能是以上7個(gè)值之一。它們是用戶自己定義的標(biāo)識(shí)符。
聲明枚舉類型的一般形式為:
enum 枚舉類型名{枚舉常量表列};
在聲明了枚舉類型之后,可以用它來定義變量。如:
weekday workday,week_end;
這樣,workday和week_end被定義為枚舉類型weekday的變量。
在C語言中,枚舉類型名包括關(guān)鍵字enum,以上的定義可以寫為:
enum weekday workday,week_end;
在C++中允許不寫enum,一般也不寫enum,但保留了C的用法。根據(jù)以上對(duì)枚舉類型weekday的聲明,枚舉變量的值只能是sun到sat之一。例如:
workday=mon; week_end=sun;
是正確的。也可以直接定義枚舉變量,如:
enum{sun, mon, tue, wed, thu, fri, sat} workday,week_end;
這些標(biāo)識(shí)符并不自動(dòng)地代表什么含義。
對(duì)枚舉類型的幾點(diǎn)說明:
對(duì)枚舉元素按常量處理,故稱枚舉常量。
枚舉元素作為常量,它們是有值的,C++編譯按定義時(shí)的順序?qū)λ鼈冑x值為0,1,2,3,…。也可以在聲明枚舉類型時(shí)另行指定枚舉元素的值。
枚舉值可以用來做判斷比較。
一個(gè)整數(shù)不能直接賦給一個(gè)枚舉變量。
【例】口袋中有紅、黃、藍(lán)、白、黑5種顏色的球若干個(gè)。每次從口袋中任意取出3個(gè)球,問得到3種不同顏色的球的可能取法,輸出每種排列的情況。
#include <iostream> #include <iomanip>//在輸出時(shí)要用到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是累計(jì)不同顏色的組合數(shù) for (i=red;i<=black;i++) //當(dāng)i為某一顏色時(shí) for (j=red;j<=black;j++) //當(dāng)j為某一顏色時(shí) if (i!=j) //若前兩個(gè)球的顏色不同 { for (k=red;k<=black;k++) //只有前兩個(gè)球的顏色不同,才需要檢查第3個(gè)球的顏色 if ((k!=i) && (k!=j)) //3個(gè)球的顏色都不同 { n=n+1;//使累計(jì)值n加1 cout<<setw(3)<<n; //輸出當(dāng)前的n值,字段寬度為3 for (loop=1;loop<=3;loop++) //先后對(duì)3個(gè)球作處理 { switch (loop) //loop的值先后為1,2,3 { case 1: pri=color(i);break ; //color(i)是強(qiáng)制類型轉(zhuǎn)換,使pri的值為i case 2: pri=color(j);break ; //使pri的值為j case 3: pri=color(k);break ; //使pri的值為k default :break ; } switch (pri)//判斷pri的值,輸出相應(yīng)的“顏色” { 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; //輸出符合條件的組合的個(gè)數(shù) return 0; }
運(yùn)行結(jié)果如下:
1 red yellow blue 2 red yellow white 3 red yellow black ┆ ┆ ┆ 58 black white red 59 black white yellow 60 black white blue total:60
不用枚舉常量,而用常數(shù)0代表“紅”,1代表“黃”……也可以。但顯然用枚舉變量更直觀,因?yàn)槊杜e元素都選用了令人“見名知意”的標(biāo)識(shí)符,而且枚舉變量的值限制在定義時(shí)規(guī) 定的幾個(gè)枚舉元素范圍如果賦予它一個(gè)其他的值,就會(huì)出現(xiàn)出錯(cuò)信息,便于檢查。
C++ typedef 聲明新類型
在C++中,除了可以聲明結(jié)構(gòu)體、共用體、枚舉等類型外,還可以用typedef聲明一個(gè)新的類型名來代替已有的類型如:
- typedef int INTEGER; //指定用標(biāo)識(shí)符INTEGER代表int類型
- typedef float REAL; //指定用REAL代表float類型
這樣,以下兩行等價(jià):
- int i,j; float a,b;
- INTEGER i,j; REAL a,b;
這樣可以使熟悉FORTRAN的人能用INTEGER和REAL定義變量,以適應(yīng)他們的習(xí)慣。
如果在一個(gè)程序中,整型變量是專門用來計(jì)數(shù)的,可以用COUNT來作為整型類型名:
typedef int COUNT; //指定用COUNT代表int型 COUNT i,j; //將變量i,j定義為COUNT類型
即int類型在程序中將變量i, j定義為COUNT類型,可以使人更一目了然地知道它們是用于計(jì)數(shù)的。
也可以聲明結(jié)構(gòu)體類型:
typedef struct //注意在struct之前用了關(guān)鍵字typedef,表示是聲明新名 { int month; int day; int year; }DATE; //注意DATE是新類型名,而不是結(jié)構(gòu)體變量名
所聲明的新類型名DATE代表上面指定的一個(gè)結(jié)構(gòu)體類型。這樣就可以用DATE定義變量:
DATE birthday; DATE *p; //p為指向此結(jié)構(gòu)體類型數(shù)據(jù)的指針
還可以進(jìn)一步:
typedef int NUM[100]; //聲明NUM為整型數(shù)組類型,包含100個(gè)元素 NUM n; //定義n為包含100個(gè)整型元素的數(shù)組 typedef char *STRING; //聲明STRING為字符指針類型 STRING p,s[10]; //p為字符指針變量,s為指針數(shù)組(有10個(gè)元素) typedef int (*POINTER)( ) //聲明POINTER為指向函數(shù)的指針類型,函數(shù)返回整型值 POINTER p1, p2; // p1,p2為POINTER類型的指針變量
歸納起來,聲明一個(gè)新的類型名的方法是:
- 先按定義變量的方法寫出定義語句(如int i;)。
- 將變量名換成新類型名(如將i換成COUNT)。
- 在最前面加typedef(如typedef int COUNT)。
- 然后可以用新類型名去定義變量。
再以聲明上述的數(shù)組類型為例來說明:
- 先按定義數(shù)組形式書寫: int n[100];
- 將變量名n換成自己指定的類型名:int NUM[100];
- 在前面加上typedef,得到 typedef int NUM[100];
- 用來定義變量: NUM n;(n是包含100個(gè)整型元素的數(shù)組)。
習(xí)慣上常把用typedef聲明的類型名用大寫字母表示,以便與系統(tǒng)提供的標(biāo)準(zhǔn)類型標(biāo)識(shí)符相區(qū)別。
關(guān)于typedef的幾點(diǎn)說明:
- typedef可以聲明各種類型名,但不能用來定義變量。用typedef可以聲明數(shù)組類型、字符串類型,使用比較方便。
- 用typedef只是對(duì)已經(jīng)存在的類型增加一個(gè)類型名,而沒有創(chuàng)造新的類型。
- 當(dāng)在不同源文件中用到同一類型數(shù)據(jù)(尤其是像數(shù)組、指針、結(jié)構(gòu)體、共用體等類型數(shù)據(jù))時(shí),常用typedef聲明一些數(shù)據(jù)類型,把它們單獨(dú)放在一個(gè)頭文件中,然后在需要用到它們的文件中用#include命令把它們包含進(jìn)來,以提高編程效率。
- 使用typedef有利于程序的通用與移植。有時(shí)程序會(huì)依賴于硬件特性,用typedef便于移植。
上一篇:詳解C++中的對(duì)象指針與對(duì)象數(shù)組
欄 目:C語言
下一篇:淺談C++中對(duì)象的復(fù)制與對(duì)象之間的相互賦值
本文標(biāo)題:講解C++中的枚舉類型以及聲明新類型的方法
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2719.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
- 01-10c++中inline的用法分析
- 01-10如何尋找數(shù)組中的第二大數(shù)
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法
- 01-10全排列算法的非遞歸實(shí)現(xiàn)與遞歸實(shí)現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)
- 01-10淺談C/C++中的static與extern關(guān)鍵字的使用詳解


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)