重载++运算符为成员函数(日期类函数设计也可以看一下 )

//这篇代码比较长建议粘贴下来到dev里面用左边的+-把部分函数收起来一条条的打开看  不容易乱 
#include <iostream>
using namespace std;
class Date{
private:	
int year,month,day;//年月日
bool IsLeapYear()//判断闰年
{
	return (year%4==0&&year%100!=0)||(year%400==0);
}
public:
	Date operator ++();        //前置单目运算符重载为成员函数
	Date operator ++(int);    //后置单目运算符重载为成员函数
	void ShowMe()//输出
	{
	cout<<year<<"-"<<month<<"-"<<day<<endl;
	}
	Date(int y=0,int m=0,int d=0)//带默认参数的构造函数(无参和有参合二为一)
	{
	year=y;
	month=m;
	day=d;
	}
};

Date Date::operator ++() //前置单目运算符重载为成员函数
{
	Date x;//先定义一个Date类的以用于返回 
	if(month==2)//先从月份进行判断  这个if、else if、else 是并列关系 
	{
		if(IsLeapYear()==1)
		{//如果是闰月 
			if(day==29)
			{//当起始日期为29 就要进月并把日返回1 
				day=1;
				month++;
			}
			else day++;//否则正常日+1 
		}
		else
		{//这里和判断闰年是并列的 
			if(day==28)
			{
				day=1;
				month++;
			}
			else day++;
		}
	}
	else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
	{ //然后收起2月的判断展开1357的 
		if(month==12)
		{//这里要注意 12月要单独讨论 因为可能会进年+1 
			if(day==31)
			{
				day=1;
				month=1;
				year++;
			}
			else day++;
		}
		else
		{//其他月份 1357
			if(day==31)
			{
				day=1;
				month++;
			}
			else day++;
		}
	}
	else
	{//合上1357打开2468 这个没什么好说的了 
		if(day==30)
		{
			day=1;
			month++;
		}
		else day++;
	}
	x.year=year;//由于这个是前置的那就是说先+ 1后等值所以这里两个数相等 
	x.month=month;
	x.day=day;
	return x; 
}
Date Date::operator ++(int)//后置单目运算符重载为成员函数
{//这里可以直接从上面粘下来判断,不过要记住先等值后+1,也就是说x记录了第一个date 然后date自己+1 
	Date x;
	x.year=year;
	x.month=month;
	x.day=day;
	
	if(month==2)
	{
		if(IsLeapYear()==1)
		{
			if(day==29)
			{
				day=1;
				month++;
			}
			else day++;
		}
		else
		{
			if(day==28)
			{
				day=1;
				month++;
			}
			else day++;
		}
	}
	else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
	{
		if(month==12)
		{
			if(day==31)
			{
				day=1;
				month=1;
				year++;
			}
			else day++;
		}
		else
		{
			if(day==31)
			{
				day=1;
				month++;
			}
			else day++;
		}
	}
	else
	{
		if(day==30)
		{
			day=1;
			month++;
		}
		else day++;
	}
	return x;
}

int main()
{
   int a,b,c;
   cin>>a>>b>>c;
   Date x(a,b,c),y;
   x.ShowMe();
   y=x++;
   x.ShowMe();   
   y.ShowMe(); 
   y=++x; 
   x.ShowMe();   
   y.ShowMe();   
   return 0;
}

猜你喜欢

转载自blog.csdn.net/q767410241/article/details/83870588
今日推荐