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


    //这篇代码比较长建议粘贴下来到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;
    }
    
  • 相关阅读:
    linux 查看硬盘使用情况
    linux 用户操作命令
    Win10系列:C#应用控件进阶2
    Win10系列:C#应用控件进阶3
    Win10系列:C#应用控件进阶1
    Win10系列:C#应用控件基础23
    Win10系列:C#应用控件基础20
    Win10系列:C#应用控件基础21
    Win10系列:C#应用控件基础19
    Win10系列:C#应用控件基础17
  • 原文地址:https://www.cnblogs.com/hzshisan/p/12571117.html
Copyright © 2020-2023  润新知