日期类的实现

来源:互联网 发布:mac 查看磁盘剩余空间 编辑:程序博客网 时间:2024/05/19 05:41

用c++实现日期类。Date.h 的代码如下:

#pragma once#include<iostream>#include<assert.h>using namespace std;class Date{public:Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;assert(IsInvalid());}void Print(){cout << this->_year << "-" << _month << "-" << _day << endl;}// 防御式编程bool IsInvalid(){if (_year >= 1900&& _month > 0 && _month < 13&& _day > 0 && _day <= GetMonthDay()){return true;}return false;}int GetMonthDay(){assert(_month > 0 && _month < 13);static int monthDays[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };if (_month == 2 &&((_year % 4 == 0 && _year % 100 != 0) || _year % 400 == 0)){return 29;}return monthDays[_month];}// d1 > d2bool operator>(const Date& d){return (_year > d._year) || (_year == d._year&&_month > d._month) || (_year == d._year&&_month == d._month&&_day > d._day);}//d1==d2bool operator==(const Date& d){return _year == d._year&& _month == d._month&& _day == d._day;}// 复用 -> 可维护性bool operator<(const Date& d){return !(*this > d || *this == d);}bool operator>=(const Date& d){return !(*this < d);}bool operator<=(const Date& d){return !(*this > d);}// d1 != d2bool operator!=(const Date& d){return !(*this == d);}// d1 + 10Date operator+(int day){if (day < 0)      //当day为负数时,复用operator-{return *this - (-day);}Date tmp(*this);tmp._day += day;while (tmp._day > tmp.GetMonthDay()){tmp._day -= tmp.GetMonthDay();tmp._month++;if (tmp._month > 12)   //加完月份后大于12月{tmp._year++;tmp._month = 1;}}return tmp;}//d1-10Date operator-(int day){if (day < 0){return *this + (-day);}Date tmp(*this);tmp._day -= day;while (tmp._day <= 0){if (tmp._month == 1){tmp._year--;tmp._month = 12;}else{--tmp._month;}tmp._day += tmp.GetMonthDay();}return tmp;}// d1 += 10 -> d1.operator+=(&d1, day)Date& operator+=(int day){*this = *this + day;    //复用operator+return *this;}Date& operator-=(int day){*this = *this - day;       //复用operator-return *this;}// --d1 -> d1.operator--(&d1)Date& operator--() // 前置{*this -= 1;     //复用operator-=return *this;}Date operator--(int) //后置{Date tmp(*this);*this -= 1;      //复用operator-=return tmp;}Date& operator++(){*this += 1;      //复用operator+=return *this;}Date operator++(int)// 后置    {Date tmp(*this);      //复用operator+=*this += 1;return tmp;}// d1 - d2两日期相减int operator-(const Date& d){int tag = 1;Date greate(*this);Date less(d);   //将两个日期存起来if (*this < d)      //若d1小于d2,交换,让less始终指向小日期{greate = d;less = *this;tag = -1;     //标记符号}int count = 0;while (less < greate){++count;++less;}return count*tag;}private:int _year;int _month;int _day;};void TestDate1(){Date d1(2017, 11, 2);Date d2 = d1 + 50000;d2.Print();/*Date d3 = d1 + -50000;d3.Print();*/Date d4 = d1 - 50000;d4.Print();--d4; //d4.operator--(&d4);d4.Print();d4++; //d4.operator--(&d4, int());d4.Print();}//void TestDate2()//{//Date d1(2017, 11, 2);//Date d2 = d1 - 500;//Date d3(2018, 9, 1);//cout << "相差的天数" << d1 - d2 << endl;//cout << "相差的天数" << d2 - d1 << endl;//cout << "相差的天数" << d1 - d3 << endl;//cout << "相差的天数" << d3 - d1 << endl;//}
Date.cpp 的代码如下:
#include"date.h"int main(){TestDate1();//TestDate2();system("pause");return 0;}




原创粉丝点击