四时宝库

程序员的知识宝库

C++|常量数组和枚举类型及其运算符重载

枚举,实质是一个整型常量,但它是一个特殊的整型常量,其值是可列举的,其定义的枚举变量只能在列举的范围内取值(符号常量,如果是对应的整数,要强制转换)。比常量数组的名字更有含义,如一周的英文,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-

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接