定义一个日期类Date,包括年、月、日等私有数据成员。要求为所定义的Date类设计如下重载运算符函数:
题:
定义一个日期类Date,包括年、月、日等私有数据成员。要求为所定义的Date类设计如下重载运算符函数:
Date operator+(int days);//返回一个日期加天数days后得到的日期
Date operator-(int days);//返回一个日期减去天数days后得到的日期
Int operator-(Date& b);//返回两个日期相差的天数
#include<iostream>
using namespace std;
class Date
{
private:
int year;
int month;
int day;
public:
Date(int, int, int);
Date operator+(int days);
Date operator-(int days);
int operator-(Date& b);//运算符重载
int getYear();
int getMonth();
int getDay();//访问器
};
Date::Date(int y = 0, int m = 0, int d = 0) :year(y), month(m), day(d) {
}//初始化列表
Date Date::operator+(int days)
{
if (day + days > 30)
{
month++;
if (month > 12)
{
month = 1;
year++;
}
day = day + days - 30;
}
else
{
day += days;
}
return *this;
}//运算符重载“+”,几天后的天数
Date Date::operator-(int days)
{
if (day - days < 0)
{
month--;
if (month == 0)
{
month = 12;
year--;
}
day = day - days + 30;
}
else
{
day -= days;
}
return *this;
}//运算符重载“-”,几天前的天数
int Date::operator-(Date& b)
{
int tmpdays1 = year * 360 + month * 30 + day;
int tmpdays2 = b.year * 360 + b.month * 30 + b.day;
if (tmpdays1 > tmpdays2)
return tmpdays1 - tmpdays2;
else
return tmpdays2 - tmpdays1;
}//运算符重载“-”,两天差距天数
int Date::getYear()
{
return year;
}
int Date::getMonth()
{
return month;
}
int Date::getDay()
{
return day;
}
int main()
{
Date date1(2020, 5, 21);
Date date2(2020, 6, 21);
Date date3;
int tmpdays3;
date3 = date1 + 3;
cout << "Three days after date1 is: " << "(" << date3.getYear() << "," << date3.getMonth() << "," << date3.getDay() << ")" << endl;
date3 = date2 - 3;
cout << "Three days before date1 is: " << "(" << date3.getYear() << "," << date3.getMonth() << "," << date3.getDay() << ")" << endl;
tmpdays3 = date1 - date2;
cout << "Two days apart: " << tmpdays3 << " days" << endl;
return 0;
}