c++类的单目和双目运算符的重定义

这个里面需要注意的是对于双目运算符,像是加号,如果是复数加整数是一种情况,而整数加复数又是另一种情况,所以需要重定义两次。

而对于单目运算符,如果是前缀的,直接重定义就可以了,但是如果是后缀的,我们在声明的时候,加上一个 int 就行了。

#include <iostream>
using namespace std;
 
class Date
{
	public :
		Date() {
			year=0;
			month=0;
			day=0;
		}
		Date(int y,int m,int d)
		{
			year = y;
			month = m;
			day = d;
		}
		void display()
		{
			cout<<year<<"/"<<month<<"/"<<day<<endl;
		}
		friend Date operator+(int i, Date c);
		friend Date operator+(Date c, int i);
		Date operator++();
		Date operator++(int);
	  private:
		int year,month,day;
};
 
Date Date::operator++()
{
	if (day+1>30) {
		day %= 30;
		if (month+1>12) {
			month %= 12;
			year++;
		}
	}
	else
		day++;
	return *this;
}
 
Date Date::operator++(int)
{
	Date temp(*this);
	if (day+1>30) {
		day %= 30;
		if (month+1>12) {
			month %= 12;
			year++;
		}
	}
	else
		day++;
	return temp;
}
 
Date operator+(int i,Date c)
{
	int year_add = i / 360;
	int month_add = i / 30;
	int day_add = i % 30;
	c.year += year_add;
	c.month = c.month + month_add % 12;
	if (c.month>12)
		c.month -= 12;
	c.day = c.day+day_add % 30;
	if (c.day>30)
		c.day -= 30;
	return c;
}
 
Date operator+(Date c,int i)
{
	int year_add = i / 360;
	int month_add = i / 30;
	int day_add = i % 30;
	c.year += year_add;
	c.month = c.month + month_add % 12;
	if (c.month>12)
		c.month -= 12;
	c.day = c.day+day_add % 30;
	if (c.day>30)
		c.day -= 30;
	return c;
}
 
int main()
{
	Date a(2018,3,10),b;
	int num=1000;
	b=a+num;
	b.display();
	++b;
	b.display();
	a = b++;
	a.display();
	b.display();
	system("pause");
	return 0;
}
原文地址:https://www.cnblogs.com/xyqxyq/p/10211354.html