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