三、设计一个日期类,包含以下功能:
1、只能通过传入年月日初始化。
2、可以加上一个数字n,返回一个该日期后推n天之后的日期。
3、减天数n
#include<iostream>
using namespace std;
#include<stdlib.h>
class Date
{
private:
int m_year;
int m_month;
int m_day;
public:
Date(int year, int month, int day) :
m_year(year),
m_month(month),
m_day(day) //初始化年月日
{
}
void dateAdd(int* month, int n); //计算日期加
void dateSub(int* month, int n); //计算日期减
};
void Date::dateAdd(int* month, int n)
{
while (n)
{
if (m_month == 2) //判断2月是几天
{
if ((m_year % 4 == 0 && m_year % 100 != 0) || m_year % 400 == 0) //闰年,2月有29天
month[2] += 1;
else
month[2] = 28;
}
if (m_day + n <= month[m_month]) //所加的天数不涉及月份
{
cout << m_year << "." << m_month << "." << m_day + n << endl;
break;
}
else //涉及月份
{
n = n - (month[m_month] - m_day) - 1; //不涉及年份
m_day = 1;
m_month++;
if (m_month > 12)
{
m_year++;
m_month = 1;
}
if (n == 0)
{
cout << m_year << "." << m_month << "." << m_day << endl;
}
}
}
}
void Date::dateSub(int* month, int n) //计算日期减
{
while (n)
{
if (m_day - n > 0) //所减的天数不涉及月份
{
cout << m_year << "." << m_month << "." << m_day - n << endl;
break;
}
else //涉及月份
{
n = n - m_day;
m_month--;
if (m_month == 0) //涉及年份
{
m_month = 12;
m_year--;
}
if (m_month == 2) //判断2月是几天
{
if ((m_year % 4 == 0 && m_year % 100 != 0) || m_year % 400 == 0) //闰年,2月有29天
month[2] += 1;
else
month[2] = 28;
}
m_day = month[m_month];
if (n == 0)
{
cout << m_year << "." << m_month << "." << m_day << endl;
}
}
}
}
int main()
{
int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //每月的天数
Date t1(2019, 9, 7);
t1.dateAdd(month, 146000);
Date t2(2419, 6, 2);
t2.dateSub(month, 146000);
system("pause");
return 0;
}