一路,一路,一路从泥泞到风景...............................................................................................
目录
前言
一、【什么是日期类】
二、【代码实现】
1.【Date.h】部分:
2.【Date.cpp】部分:
3.【Test.cpp】部分:
总结
前言
本篇是日期类的编写,望多多指正。
一、【什么是日期类】
在学习完类和对象之后,可以试着编写一个日期类进行练习,使得该类能够加减天数,计算两个日期之间相差的天数,还可以比较两个类之间的大小。
二、【代码实现】
1.【Date.h】部分:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <iostream> #include <stdbool.h> #include <assert.h> using namespace std; class Date { public: friend ostream& operator<<(ostream& out, const Date& d); friend istream& operator>>(istream& in, Date& d); int GetMonthDay(int year, int month); Date(int year = 1, int month = 1, int day = 1); Date(const Date& d); bool operator<(const Date& d); bool operator==(const Date& d); bool operator<=(const Date& d); bool operator>(const Date& d); bool operator>=(const Date& d); bool operator!=(const Date& d); Date& operator+=(int day); Date operator+(int day)const; Date operator-(int day)const; Date& operator-=(int day); Date& operator++(); Date operator++(int); Date operator--(int); Date& operator--(); int operator-(const Date& d); private: int _year; int _month; int _day; };
2.【Date.cpp】部分:
#include "Date.h" int Date::GetMonthDay(int year, int month) { const static int MonthDay[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 MonthDay[month]; } Date::Date(int year, int month, int day) { _year = year; _month = month; _day = day; if (year < 1 || month < 1 || month>12 || day<1 || day>GetMonthDay(year,month)) { cout << "error date" << endl; exit(-1); } } Date::Date(const Date& d) { _year = d._year; _month = d._month; _day = d._day; } bool Date::operator<(const Date& d) { if (_year < d._year) { return true; } else if (_year == d._year && _month < d._month) { return true; } else if (_year == d._year && _month == d._month && _day < d._day) { return true; } else { return false; } } bool Date::operator==(const Date& d) { return (_year == d._year) && (_month == d._month) && (_day == d._day); } bool Date::operator<=(const Date& d) { return (*this < d) || (*this == d); } bool Date::operator>(const Date& d) { return !(*this <= d); } bool Date::operator>=(const Date& d) { return !(*this < d); } bool Date::operator!=(const Date& d) { return !(*this == d); } Date& Date::operator+=(int day) { if (day < 0) { return *this -= (-day); } _day += day; while(_day > GetMonthDay(_year, _month)) { _day -= GetMonthDay(_year, _month); _month++; if (_month == 12) { _year++; _month = 1; } } return *this; } Date Date::operator+(int day)const { Date tmp(*this); tmp += day; return tmp; } //Date Date::operator-(int day) //{ // Date tmp(*this); // tmp._day -= day; // while (tmp._day <= 0) // { // tmp._month--; // if (tmp._month < 1) // { // tmp._year--; // tmp._month = 12; // } // tmp._day += tmp.GetMonthDay(tmp._year, tmp._month); // } // return tmp; //} //Date& Date::operator-=(int day) //{ // *this = *this - day; // return *this; //} Date& Date::operator-=(int day) { if (day < 0) { return *this += (-day); } _day -= day; while (_day <= 0) { --_month; if (_month == 0) { --_year; _month = 12; } _day += GetMonthDay(_year, _month); } return *this; } Date Date::operator-(int day) const { Date tmp(*this); tmp -= day; return tmp; } Date& Date::operator++() { *this += 1; return *this; } Date Date::operator++(int) { Date tmp(*this); *this += 1; return tmp; } Date& Date::operator--() { *this -= 1; return *this; } Date Date::operator--(int) { Date tmp(*this); *this -= 1; return tmp; } int Date::operator-(const Date& d) { Date Max = *this; Date Min = d; int flag = 1; if (*this < d) { Max = d; Min = *this; flag = -1; } int n = 0; while (Min != Max) { Min++; n++; } return flag * n; } ostream& operator<<(ostream& out, const Date& d) { out << d._year << "/" << d._month << "/" << d._day << endl; return out; } istream& operator>>(istream& in, Date& d) { in >> d._year >> d._month >> d._day; return in; }
3.【Test.cpp】部分:
#define _CRT_SECURE_NO_WARNINGS #include "Date.h" int main() { Date d1(2023,7,1); Date d2(2023, 7, 28); cout << d1 << endl; cout << d2 << endl; cout << (d2-d1) << endl; cout << (++d2) << endl; cout << (d2++) << endl; cout << d2 << endl; cout << (d1--) << endl; cout << (--d1) << endl; Date sum = d2 + 260; cout << sum << endl; cout << (d2+=480) << endl; return 0; }
总结
本片到这里就结束了,感谢观看!
.......................................................................................................你过得好吗?会想起我吗?
————《你过得好吗》