枚舉類型 enum
一、枚舉類型的定義
枚舉類型(enumeration):是C++中的一種派生數據類型,它是由用戶定義的若干枚舉常量的集合。
Enum 枚舉類型名 {變量值列表};
- enum:關鍵字,指明其后的標識符是一個枚舉類型的名字
- 變量值列表:由枚舉常量構成,通常用逗號隔開
【解析】
如果一個變量只有幾種可能的值,可以定義為枚舉(enumeration)類型。所謂“枚舉”是指將變量的值一一列舉出來,變量的值只能在列舉出來的值的范圍內。聲明枚舉類型用enum開頭。
二、枚舉類型的應用說明
- 對枚舉元素常按照常量處理,不能對他們賦值
Enum Weekday {SUM,MON,TUE,WED,THU,FRI,SAT}; //定義枚舉類型
SUM=0; //SUM是枚舉類型,此語句非法
- 枚舉元素具有默認值,依次為:0,1,2,3。。。
- 聲明時可以另行定義枚舉元素的值
Enum Weekday {SUM=7,MON=1,TUE,WED,THU,FRI,SAT}; //后面從TUE依次為23456
- 枚舉值可以進行關系運算
- 整數值不能直接賦值給枚舉變量,如需將整數值給枚舉類型,需要進行強制轉換
例題【書上2-11】
【問題描述】
設某次體育比賽的結果有四種可能:WIN,LOSE,TIE,CANCEL,編寫程序輸出這四種情況
【分析】
比賽結果只有這四種,所以可以使用枚舉類型來存放比賽結果
【代碼】
#include<iostream>
using namespace std;
enum Game{WIN,LOSE,TIE,CANCEL};
int main() {
Game gameResult,omit=CANCEL;
for (int i = WIN; i <= CANCEL; i++) { //隱含類型轉換
gameResult = Game(i); //顯式類型轉換
if (gameResult == omit)
cout << endl<<"the game was canceled." << endl;
else {
cout << "the game was played. ";
if (gameResult == WIN) cout << "we won!!" << endl;
if (gameResult == LOSE) cout << "we lost.." << endl;
}
}
return 0;
}
三、枚舉類型的應用
例題【書上2-34】
【問題描述】
口袋中有紅、黃、藍、白、黑 5種顏色的球若干,每次從口袋中拿出三個不同顏色,問有多少種取法。
【分析】
由於球只能是五種顏色之一,故可用枚舉類型表示球的顏色。設取出的球為i、j、k,根據題意,i、j、k分別可以有五種取值,且i≠j≠k。可以用窮舉法,逐個檢驗每一種可能的組合,從中找出符合要求的組合並輸出。
【代碼】
#include<iostream>
using namespace std;
int print(int x) { //借助函數輸出每種結果
switch (x)
{
case 0:cout << "RED "; break;
case 1:cout << "YELLOW "; break;
case 2:cout << "BLUE "; break;
case 3:cout << "WHITE "; break;
case 4:cout << "BLACK "; break;
}
return 0;
}
int main() {
enum color { RED, YELLOW, BLUE, WHITE, BLACK }; //定義枚舉類型
int i, j, k, n = 0;
for (i = RED; i <= BLACK; i++)
for (j = i + 1; j <= BLACK; j++)
for (k = j + 1; k <= BLACK; k++) {
n++;
print(i);
print(j);
print(k);
cout << endl;
}
cout << "共有" << n << "種";
return 0;
}