關於C++枚舉類型enum


關於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語句來輸出相應的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM