枚舉類型enum(C++語言)


一、關於enum

在實際問題中,有些變量的取值被限定在一個有限的范圍內。比如一場比賽的結果只有勝、負、平局、比賽取消4種情況;一個袋子里只有紅、黃、藍、白、黑5種顏色的球;一個星期只有星期一、星期二、……、星期日7天。上述的數據只有有限的幾種可能值,雖可以用int、char等類型來表示它們,但對數據合法性的檢查卻是一件很麻煩的事情。C++中的枚舉類型專門用來解決這些問題。

  • 枚舉類型的聲明形式如下:

    enum 枚舉類型名 {變量值列表};

  • 例如:

    enum Weekday {SUN,MON,TUE,WED,THU,FRI,SAT};

【注】枚舉類型是一種基本數據類型,而不是一種構造類型

  • 枚舉變量的說明

    設有變量a,b,c被說明為上述的Weekday,可采用下述任一種方式:
    enum Weekday {MON,TUE,WED,THU,FRI,SAT};
    enum a,b,c;
    或者
    enum Weekday {MON,TUE,WED,THU,FRI,SAT}a,b,c;
    或者
    enum {MON,TUE,WED,THU,FRI,SAT}a,b,c;


二、枚舉類型的應用說明

  • 枚舉元素按常量處理,不能對其賦值。例如:
SUN=0;     //SUN是枚舉元素,此語句非法  
  • 枚舉元素具有默認值,依次從0開始。例如,SUN的值為0,MON的值為1……SAT的值為6。

  • 可以在聲明時對其賦值,則后續變量依次加一。如

    enum Weekday {SUN,MON=4,TUE,WED,THU,FRI,SAT}; //其中MON=4,則TUE為5,WED為6……

  • 不能將非枚舉量賦值給枚舉量,但是可以將枚舉量賦值給非枚舉量。如:

    int a =MON;

  • 在不進行強制轉換的前提下,只能將定義的枚舉量賦值給該種枚舉的變量。例如:

    Weekday = MON;或者Weekday = SUN;不能將其他值賦值給枚舉變量,
    如:Weekday = 10。


三、枚舉的運算

  • 不能對其進行算數運算

    Weekday++;Weekday=MON+TUESDAY;
    這類操作是非法的,因為可能導致違反類型限制。
    比如:Weekday=SUN;Weekday++;
    Weekday首先被賦值SUN(SUN為6),再遞增的話,Weekday遞增到7,而7是無效的。

  • 能參與其他類型變量的運算

    int a;
    a = 1 + MON;
    //這是允許的,因為編譯器會自動將枚舉量轉換為int類型。


四、枚舉類型的應用

枚舉數據類型的目的之一是符號名稱有助於使程序自我解釋。但是,由於這些名稱不 是字符串,它們僅在程序中使用。

因為枚舉數據類型的符號名稱與整數值相關聯,所以它們可以在 switch 語句中使用,如下面的程序所示,該程序還演示了可以使用枚舉的數據類型,而不實際創建該類型的任何變量。

#include <iostream>
using namespace std;

enum Roster{Tom = 1,Sharon,Bill,Teresa,John};

int main()
{
	int who;
	cin>>who;
	switch(who)
	{
	case Tom:
		cout<<"Tom's birthday is Junuary 3\n";
		break;
	case Sharon:
		cout<<"Sharon's birthday is April 22\n";
		break;
	case Bill:
		cout<<"Bill's birthday is December 19\n";
		break;
	case Teresa:
		cout<<"Teresa's birthday is February 2\n";
		break;
	case John:
		cout<<"John's birthday is June 17\n";
		break;
	default:
		cout<<"Invalid selection\n";
	}
	return 0;
}  


免責聲明!

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



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