目录
我们在前面的两章初步学习认识了《类与对象》的概念,接下来我们将实现一个日期类,是我们的知识储备更加牢固。
- #pragma once
- #define _CRT_SECURE_NO_WARNIGS 1
- #include
- using namespace std;
-
- class Date
- {
- public:
- friend ostream& operator<<(ostream& out, const Date& d);
- int GetMonthDay(int _year, int _month)
- {
- int day[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
- if ((_year % 4 == 0) && (_year % 100 != 0) || (_year % 400 == 0))
- {
- day[2] = 29;
- }
-
- return day[_month];
- }
-
- Date(int year = 2000, int month = 1, int day = 1)
- {
- if (month > 12 || day > GetMonthDay(year, month))
- {
- cout << "Setting error!!!" << endl;
- exit(-1);
- }
- _year = year;
- _month = month;
- _day = day;
- }
- 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);
- Date& operator++();
- Date operator++(int);
- Date& operator-=(int day);
- Date operator-(int day);
- Date& operator--();
- Date operator--(int);
- int operator-(const Date& d);
- private:
- int _year;
- int _month;
- int _day;
- };
- #include"Data.h"
- 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);
- }
- bool Date::operator>(const Date& d)
- {
- if (_year > d._year)
- {
- return true;
- }
- else if (_year < d._year)
- {
- return false;
- }
- if (_month > d._month)
- {
- return true;
- }
- else if (_month < d._month)
- {
- return false;
- }
- if (_day > d._day)
- {
- return true;
- }
- return false;
- }
- 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);
- }
-
- Date& Date::operator+=(int day)
- {
- _day += day;
- while (_day > GetMonthDay(_year, _month))
- {
- _day -= GetMonthDay(_year, _month);
- _month++;
- if (_month == 13)
- {
- _month = 1;
- _year++;
- }
- }
- return *this;
- }
-
- Date Date::operator+(int day)
- {
- 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-=(int day)
- {
- _day -= day;
- while (_day <= 0)
- {
- _month--;
- if (_month == 0)
- {
- _month = 12;
- _year--;
- }
- _day += GetMonthDay(_year, _month);
- }
- return *this;
- }
-
- Date Date::operator-(int day)
- {
- 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;
- }
-
- int Date::operator-(const Date& d)
- {
- int flag = 1;
- Date max = *this;
- Date min = d;
- if (max < min)
- {
- max = d;
- min = *this;
- flag = -1;
- }
- int count = 0;
- while (max != min)
- {
- ++min;
- ++count;
- }
- return flag * count;
- }
-
- ostream& operator<<(ostream& out, const Date& d)
- {
- out << d._year << "年" << d._month << "月" << d._day << "号";
- return out;
- }
- #include"Data.h"
- int main()
- {
- Date d1(2024, 3, 10);
- cout << d1 << endl;
- Date d2(2024, 6, 17);
- cout << d2 << endl;
- printf("相差天数:");
- cout << (d2 - d1) << endl;
- return 0;
- }
