C++.Experiment 4.Operator overloading(& date plus days)

2014-11-24 02:46:49 · 作者: · 浏览: 1
/*设计一个日期类Date,,要求:
(1)包含年(year)、月(month)和日(day)私有数据成员。
(2)包含构造函数,
重载关于一日期加上天数的加法运算符+、
重载关于一日期减去天数的减加运算符-、
重载输出运算符<<与输入运算符>>等。
*/
#include
using namespace std;
class Date{
private:
	int year,month,day;
public:
	Date(int y=2013,int m=1,int d=1):year(y),month(m),day(d){};
	friend Date &operator+(Date&,int);
	friend Date &operator-(Date&,int);
	friend ostream&operator<<(ostream &os,Date &D){os<>(istream &is,Date &D){is>>D.year>>D.month>>D.day;};
};
Date &operator+(Date &D,int d){
	switch(D.month){
	case 1:case 3:case 5:case 7:case 8:case 10:case 12:
		if(D.day+d>31){
			D.month++;
			d=d-(31-D.day)-1;
			D.day=1;
			if(D.month==13){
				D.year++;
				D.month=1;
			}
			D+d;
		}else{
			D.day+=d;
		}break;
	case 2:
		if((D.year%100!=0&&D.year%4==0)||(D.year%400==0)){
			if((D.day+d)>29){
				D.month++;
				d=d-(29-D.day)-1;
				D.day=1;
				D+d;
			}else{
				D.day+=d;
			}break;
		}else{
			if((D.day+d)>
28){ D.month++; d=d-(28-D.day)-1; D.day=1; D+d; }else{ D.day+=d; }break; } default: if((D.day+d)>30){ D.month++; d=d-(30-D.day)-1; D.day=1; D+d; }else{ D.day+=d; }break; } return D; } Date &operator-(Date &D,int d){ switch(D.month){ case 1:case 2:case 4:case 6:case 8:case 9:case 11: if(D.day-d<0){ D.month--; d=d-D.day; D.day=31; if(D.month==0){ D.year--; D.month=12; } D-d; }else{ D.day-=d; }break; case 3: if((D.year%100!=0&&D.year%4==0)||(D.year%400==0)){ if(D.day-d<0){ D.month--; d=d-D.day; D.day=29; D-d; }else{ D.day-=d; }break; }else{ if(D.day-d<0){ D.month--; d=d-D.day; D.day=28; D-d; }else{ D.day-=d; }break; } default: if(D.day-d<0){ D.month--; d=d-D.day; D.day=30; D-d; }else{ D.day-=d; }break; } return D; } void main(){ Date D; cin>>D; //输入日期 cout<