關於C++枚舉類型enum
一、何為枚舉類型?
枚舉類型(enumeration)是C++中的一種派生數據類型,它是由用戶定義的若干枚舉常量的集合。
聲明形式:
enum 枚舉名 {變量列表};
例如:
enum Weekday{SUN,MON.TUE,WED,THU,FRI,SAT};
定義枚舉數據類型變量,例如:
Weekday myweekday;
(注意數據類型是Weekday而不是enum Weekday)
二、枚舉類型應用說明
1,枚舉元素具有默認數值,它們依次為:0,1,2,3,...。例如上例中SUN的值為0,MON的值為1,TUE為2,...,SAT為6。
2, 也可以在聲明中另行定義枚舉元素的值,如:
enum Weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
定義SUN為7,MON為1,以后順序加1,TUE為2,WED為3,...,SAT為6。
3, 對枚舉元素按常量處理,但不能對它們直接賦予常量值。例如,下面的的語句是錯誤的:
SUN=7;//SUN是枚舉元素,不能直接賦予常量值
如需要將整數附值給枚舉變量,應進行強制類型轉換,例如:
SUN=(Weekday)7;//在值前面加(類型)是常用的強制類型轉換方法
4,枚舉值可以進行關系運算:
1)可以使用關系運算符來比較兩個枚舉變量。例如,以下 if 語句判斷存儲在 myweekday1中的值是否小於存儲在 myweekday中的值:
if ( myweekday1 < myweekday2)
如果 myweekday1存儲的值小於 myweekday2的值,則該語句為 true。否則該語句將為 false。
2)可以使用整數值而不是符號名稱來測試枚舉變量。例如,以下兩個 if 語句是等效的:
if myweekday== MON)
if ( myweekday == 1)
5, 如果為枚舉變量賦值,則它們必須是整數。以下賦值語句將產生錯誤:
enum Weekday{SUN=1.1,MON=1.2,TUE=1.3,WED=1.4,THU,FRI,SAT }; //錯誤
6, 枚舉數據類型的目的之一是符號名稱有助於使程序自我解釋。但是,這些名稱不是字符串,而是數值,所以在輸出時,輸出的是數字,而不是字符串。例如:
Weekday myweekday = SUN;
cout << myweekday;//輸出的是0這個數值
輸入結果如下:
7, 枚舉值可以賦給整型變量,例如:
int a;
a = SUN;//枚舉值可以賦給整形變量
cout << a;
8, 因為枚舉數據類型的符號名稱與整數值相關聯,所以它們可以在 switch 語句中使用,如下面的程序所示:
題目:口袋中有紅,黃,藍,白,黑5種顏色球若干個。每次從口袋中取出3個不同顏色的球,問有多少種取法?
#include<iostream>
using namespace std;
void transfer(int i)//將相應的數值組合通過switch語句轉換為字符串
{
switch (i)
{
case 0:cout << "red "; break;
case 1:cout << "yello "; break;
case 2:cout << "blue "; break;
case 3:cout << "white "; break;
case 4:cout << "black "; break;
}
}
enum ball {red,yello,blue,white,black};//定義球的枚舉類型
int main()
{
int i, j, k,count=0;
for (int i = red; i <= black; i++)
{
for (int j = i+1; j <= black; j++)
{
for (int k =j+1; k <= black; k++)
{
transfer(i);
transfer(j);
transfer(k);
cout <<endl;
count++;
}
}
}
cout << count;
return 0;
}
運行結果:
三,總結
當一個變量有幾種可能的取值時,可以將它定義為枚舉類型。枚舉類型有利於程序的可讀性。對枚舉元素按常量處理,枚舉元素具有默認數值,但不能對它們直接賦予常量值。因為枚舉變量是整數,所以也可以使用關系運算符來比較兩個枚舉變量,並且通常配合switch語句來輸出相應的值。