目录

一、输入输出(>>,<<)重载的实现

1.1初始版

 1.2友元并修改

1.2.1简单介绍下友元

1.2.2修改

1.3>>重载

二、条件判断操作符的实现

2.1==操作符的实现

2.2!=操作符的实现

2.3>操作符的实现

2.4>=,<=,<操作符的实现

三、日期-日期的实现

四、下期预告


一、输入输出(>>,<<)重载的实现

1.1初始版

第一次实现往往就实现成了这副模样

	ostream& operator<<(ostream& out)
	{
		out << _year << "-" << _month << "-" << _day<<endl;
		return out;
	}

C++初阶 日期类的实现(下)-LMLPHP d1<<cout:

C++初阶 日期类的实现(下)-LMLPHP

 1.2友元并修改

1.2.1简单介绍下友元

1.2.2修改

有了友元之后我们的修改便只需要在类外面把我们的函数写好后,再在Date类中使用友元扩大我们函数的权限即可

C++初阶 日期类的实现(下)-LMLPHP

1.3>>重载

有了前面的基础,这个的实现自然是手到擒来的

C++初阶 日期类的实现(下)-LMLPHP

二、条件判断操作符的实现

2.1==操作符的实现

三个参数都相同就相同,即年月日都相等就相等

	bool operator==(Date& d1)
	{
		return (_year == d1._year) && (_month == d1._month) && (_day == d1._day);
	}

2.2!=操作符的实现

复用一下==操作符即可

bool operator!=(Date& d1)
	{
		return !((*this) == d1);
	}

2.3>操作符的实现

先将大于的全都判断完,剩下的就一定是小于或者等于,也就是false,顺着这个思路写

	bool operator>(Date& d1)
	{
		if (_year > d1._year)
		{
			return true;
		}
		if(_year==d1._year&&_month>d1._month)
		{
			return true;
		}
		if (_year == d1._year && _month == d1._month && _day > d1._day)
		{
			return true;
		}
		return false;
	}

2.4>=,<=,<操作符的实现

这三个操作符均可以通过复用实现,这里就不再赘述。

	bool operator>=(Date& d1)
	{
		return (*this) > d1 || (*this) == d1;
	}
	bool operator<(Date& d1)
	{
		return !((*this) >= d1);
	}
	bool operator<=(Date& d1)
	{
		return !((*this) > d1);
	}

三、日期-日期的实现

目标:计算出两个日期之间差了多少天

int operator -(Date d2)
	{
		int big_year = _year;
		int small_year = d2._year;
		int sum = 0; int flaw = 1;
		if (*this < d2)
		{
			int tmp = big_year;
			big_year = small_year;
			small_year = tmp;
			flaw = -1;
		}
		Date d1_cp(_year,1,1);
		Date d2_cp(d2._year,1,1);
		while (small_year != big_year)
		{
			sum += GetYearDay(small_year);
			small_year++;
		}
		int a1 = 0; int a2 = 0;
		while (d1_cp != (*this))
		{
			d1_cp++;
			a1++;
		}
		while (d2_cp != d2)
		{
			d2_cp++;
			a2++;
		}
		if(flaw==1)
		return sum + a1 - a2;
		else
			return -(sum-a1+a2);
	}

测试:

C++初阶 日期类的实现(下)-LMLPHP 

C++初阶 日期类的实现(下)-LMLPHP 

四、下期预告

类和对象就这样讲完了,下回我们来讲一下C++的内存管理QAQ

11-19 18:16