C++教程:什么是枚舉類型
2020-05-23 14:27:05
供稿:網友
在基本的數據類型中,無外乎就是些數字和字符。但是某些事物是較難用數字和字符來準確地表示的。比如一周有七天,分別是Sunday、Monday、Tuesday、Wednesday、Thursday、Friday和Saturday。如果我們用整數0、1、2、3、4、5、6來表示這七天,那么多下來的那些整數該怎么辦?而且這樣的設置很容易讓數據出錯,即取值超出范圍。我們能否自創一個數據類型,而數據的取值范圍就是這七天呢?
C++中有一種數據類型稱為枚舉(Enumeration)類型,它允許用戶自己來定義一種數據類型,并且列出該數據類型的取值范圍。
我們說變量就好像是一個箱子,而數據類型就好像是箱子的類型,所以我們在創建某個枚舉類型的變量的時候,必須先把這個枚舉類型設計好,即把箱子的類型設計好。定義枚舉類型的語法格式為:
enum 類型名{常量1[,常量2,……常量n]};
定義枚舉類型的位置應該在程序首次使用該類型名之前,否則程序無法識別該類型。枚舉類型中我們列出的常量稱為枚舉常量。它并不是字符串也不是數值,而只是一些符號。
如果我們要定義一周七天的日期類型,可以這樣寫:
enum day{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
這時候,程序中就有了一種新的數據類型——day,它的取值范圍就是Sunday到Saturday的那七天。我們已經把類型設計好,下面我們就能來創建一個day類型的變量了:
day today;
today=Sunday;
這樣,day類型的變量today的值就是Tuesday了。
下面我們來寫一段程序來運用一下枚舉類型的數據:(程序9.1)
#include "iostream.h"
enum day{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
void nextday(day &D);//向后一天是星期幾,參數為day類型,是程序中首次使用該類型名
void display(day D);//顯示某一天是星期幾
int main()
{
day today=Sunday;
for (int i=0;i<7;i++)
{
cout <<"Data in today=" <<today <<endl;
display(today);
nextday(today);
}
return 0;
}
void nextday(day &D)
{
switch(D)
{
case Sunday:
D=Monday;
break;
case Monday:
D=Tuesday;
break;
case Tuesday:
D=Wednesday;
break;
case Wednesday:
D=Thursday;
break;
case Thursday:
D=Friday;
break;
case Friday:
D=Saturday;
break;
case Saturday:
D=Sunday;
break;
}
}
void display(day D)
{
switch(D)
{
case Sunday:
cout <<"Sunday" <<endl;
break;
case Monday:
cout <<"Monday" <<endl;
break;
case Tuesday:
cout <<"Tuesday" <<endl;
break;
case Wednesday:
cout <<"Wednesday" <<endl;
break;
case Thursday:
cout <<"Thursday" <<endl;
break;
case Friday:
cout <<"Friday" <<endl;
break;
case Saturday:
cout <<"Saturday" <<endl;
break;
}
}
運行結果:
Data in today=0
Sunday
Data in today=1
Monday
Data in today=2
Tuesday
Data in today=3
Wednesday
Data in today=4
Thursday
Data in today=5
Friday
Data in today=6
Saturday
根據運行結果,我們發現在day型變量today中保存的竟然是整數!也就是說,一個整數和一個枚舉常量一一對應了起來,要注意是一一對應,而不是相等。但是如果我們把整數直接賦值給today變量,則會發生錯誤。雖然枚舉類型的實質是整數,但是電腦還是會仔細檢查數據類型,禁止不同數據類型的數據互相賦值。另外,在一般情況下,枚舉類型是不能進行算術運算的。