枚舉常量是枚舉類型中的值,即枚舉值。枚舉類型是一種使用者定義的類型,只有使用者在程式中定義它後才能被使用。使用者通常利用枚舉類型定義程式中需要使用的一組相關的符號常量。枚舉類型的定義格式為:
enum <枚舉類型名> {<枚舉表>};
它是一條枚舉類型定義語句,該語句以enum保留字開始,接著為枚舉類型名,它是使用者命名的一個標識符,以後就直接使用它表示該類型,枚舉類型名後為該類型的定義體,它是由一對花括弧和其中的枚舉表所組成,枚舉表為一組用逗號分開的由使用者命名的符號常量,每個符號常量又稱為枚舉常量或枚舉值。如:
(1) enum color{red, yellow, blue};
(2) enum day{Sun, Mon, Tues, Wed, Thur, Fri, Sat};
Note:最後一個元素後面不要加逗號,否則編譯出錯。
第一條語句定義了一個枚舉類型color,用來表示顏色,它包含三個枚舉值red,yellow和blue,分別代表紅色、黃色和蘭色。
第二條語句定義了一個枚舉類型day,用來表示日期,它包含7個枚舉值,分別表示星期日、星期一至星期六。
一種枚舉類型被定義後,可以象整型等預定義類型一樣使用在允許出現資料類型的任何地方。如可以利用它定義變數。
(1) enum color c1, c2,c3;
(2) enum day today, workday;
(3) c1=red;
(4) workday=Wed;
第一條語句開始的保留字enum和類型標識符colou表示上述定義的枚舉類型color,其中enum可以省略不寫,後面的三個標識符c1,c2和c3表示該類型的三個變數,每一個變數用來表示該枚舉表中列出的任一個值。
第二條語句開始的兩個成分(成分之間的空格除外)表示上述定義的枚舉類型day,同樣enum可以省略不寫,後面的兩個標識符today和workday表示該類型的兩個變數,每一個變數用來表示該枚舉表中列出的七個值中的任一個值。
第三條語句把枚舉值red賦給變數c1,第四條語句把枚舉值Wed賦給變數workday。
在一個枚舉類型的枚舉表中列出的每一個枚舉常量都對應著一個整數值,該整數值可以由系統自動確認,也可以由使用者指定。若使用者在枚舉表中一個枚舉常量後加上賦值號和一個整型常量,則就表示枚舉常量被賦予了這個整型常量的值。如:
enum day{Sun=7, Mon=0, Tues, Wed, Thur, Fri, Sat};
使用者指定了Sun的值為7,Mon的值為0。
若使用者沒有給一個枚舉常量賦初值,則系統給它賦予的值是它前一項枚舉常量的值加1,若它本身就是首項,則被自動賦予整數0。如對於上述定義的color類型,red,yellow和blue的值分別為0,1和2;對於剛被修改定義的day類型,各枚舉常量的值依次為7,0,1,2,3,4,5,6。
由於各枚舉常量的值是一個整數,所以可把它同一般整數一樣看待,參與整數的各種運算。又由於它本身是一個符號常量,所以當作為輸出資料項目時,輸出的是它的整數值,而不是它的標識符,這一點同輸出其他類型的符號常量是一致的。
下面是一個使用枚舉類型的例子.(從網上收集得到)
#include <iostream>
#include <iostream>
using namespace std;
enum Day {Saturday, Sunday
= 0, Monday, Tuesday,
Wednesday,
Thursday, Friday}; //Saturday = 0 by
default, Sunday = 0 as well
void Prnt (Day day)
// Print whether a day is a 'Weekend' or a "Weekday".
{
if (day ==0)
cout << "Weekend" << endl;
else cout << "Weekday"
<< endl;
}
int main(){
enum Fruit {apple, pear,
orange, banana} frt1;
// 'frt1' can be declarated here.
// int apple; // error: redefinition of 'apple'
typedef enum Fruit ShuiGuo; // In c++, 'enum' can be omitted.
enum Fruit frt2 = apple;
// In c++, 'enum' can be omitted.
ShuiGuo frt3 = pear;
// After type-declaration synonym, 'enum' can not exist here!
frt1 = (Fruit) 0;
// 'frt1' can be assigned with number by explicit cast.
for (int i =
apple; i <= banana; i++)
switch (i)
{
case apple: cout <<
"apple" << endl; break;
case pear: cout <<
"pear" << endl; break;
case orange: cout <<
"orange" << endl; break;
case banana: cout <<
"banana" << endl; break;
default: break;
}
// Print whether a day is a 'Weekend' or a "Weekday".
Prnt (Saturday);
Prnt (Sunday);
Prnt (Monday);
Prnt (Tuesday);
Prnt (Wednesday);
Prnt (Thursday);
Prnt (Friday);
return 0;
}