又是一个昏昏欲睡的下午~好了不多说,开始总结自己写的代码吧
我写这个日期类,一个是判断输入的时期是否合法,也就是在构造函数那块,还有一个是运算符重载的时候
先讲一下如何判断日期是否合法,写一个函数返回当前月的天数,代码如下:
//判断闰年
bool Date::isleap(int year) {
if ((_year % 4 == 0 && _year % 100 != 0) || (_year % 400 == 0)) {
return true;
}
return false;
}
//求出当前月的天数
int Date::_GetMonthDay(int year, int month) {
//对year和month的合法性进行判断
assert(month > 0 && month < 13);
assert(year >= 0);
//不同月份的天数
int arr_month[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isleap(year) && month == 2) {
//是闰年的二月,就把二月的天数+1
return arr_month[month] + 1;
}
return arr_month[month];
}
因为闰年的二月是29天,所以需要判断当前年月是否是闰年的二月
运算符重载的一些操作就不说了,都是一些细节性的问题,在判断两个日期类大于小于大于等于之类的时候,只需要实现两个操作符,一个等于,和一个大于或者小于的函数,其他的都可以调用这两个函数来实现了
这里主要讲一讲求出两个日期之间的时间
//两个日期相隔天数
int Date::operator-(const Date& d) {
int day = 0;
Date Max, Min;
if (*this > d) {
Max = *this;
Min = d;
}
else {
Max = d;
Min = *this;
}
while (Min != Max) {
--Max;
++day;
}
return day;
}
用一个day变量来存储天数,然后找出两个日期之间较大的,让它进行自减操作再让day变量进行自增操作直到两个日期类相等,这样就计算出了两个日期类之间的变量
其实一个日期类是个比较简单的类,下面是全部的代码:
Date.h
#pragma once
#include<iostream>
using namespace s