枚举,实质是一个整型常量,但它是一个特殊的整型常量,其值是可列举的,其定义的枚举变量只能在列举的范围内取值(符号常量,如果是对应的整数,要强制转换)。比常量数组的名字更有含义,如一周的英文,Friday比week[5]更有意义。当然,相对于宏定义,如#define Friday 5,也显得更简洁、准确(限定了有限的取值可能)。
#include<iostream> using namespace std; const int week[7]={0,1,2,3,4,5,6}; void coutweek(int i) { switch(week[i]) { case 0: cout<<"Sunday"<<endl; break; case 1: cout<<"Monday"<<endl; break; case 2: cout<<"Tuesday"<<endl; break; case 3: cout<<"Wednesday"<<endl; break; case 4: cout<<"Thursday"<<endl; break; case 5: cout<<"Friday"<<endl; break; case 6: cout<<"Saturday"<<endl; break; } } enum Weekday{ Sunday,Monday,Tuesday,Wendesday,Thursday,Friday,Saturday }; Weekday& operator++(Weekday& day) { if(day==Saturday) day = Sunday; else day = Weekday(day+1);//数据类型显式转换 return day; }//如果中间有赋值,打乱了线性顺序,则不能循环去遍历 ostream& operator<<(ostream& out, Weekday day) { char* week[] = {"Sunday","Monday","Tuesday","Wendesday","Thursday","Friday","Saturday"}; out<<week[day]<<endl; return out; } void main() { int n,m; cout<<"今天是星期几?请输入数字表示(星期天用0):"<<endl; cin>>n; //使用常量数组 cout<<week[n]<<endl; coutweek(n); cout<<"再过m天是星期几?请输入m:"<<endl; cin>>m; coutweek((week[n]+m)%7); //使用枚举 Weekday today = Weekday(n); while(m--) ++today; cout<<today<<endl; today=Weekday((today+m)%7+1);//数据类型显式转换 cout<<today<<endl; system("pause"); } /*output: 今天是星期几?请输入数字表示(星期天用0): 6 6 Saturday 再过m天是星期几?请输入m: 36 Sunday Sunday Sunday */
-End-