目录
一、输入输出(>>,<<)重载的实现
1.1初始版
第一次实现往往就实现成了这副模样
ostream& operator<<(ostream& out)
{
out << _year << "-" << _month << "-" << _day<<endl;
return out;
}
d1<<cout:
1.2友元并修改
1.2.1简单介绍下友元
1.2.2修改
有了友元之后我们的修改便只需要在类外面把我们的函数写好后,再在Date类中使用友元扩大我们函数的权限即可
1.3>>重载
有了前面的基础,这个的实现自然是手到擒来的
二、条件判断操作符的实现
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++的内存管理QAQ