赞
踩
Date.h
#pragma once #include<iostream> using namespace std; class Date { public: //获取某年某月的天数 int GetMonthDay(int year, int month) { static int MonthDay[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //建立12个月天数的数组 //判断是否是闰年的二月份 if (month == 2&& ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))) { return 29; } else { return MonthDay[month]; } } //全缺省构造函数 Date(int year=1997,int month=10,int day=20) { _year = year; _month = month; _day = day; //检查输入的日期是否合法 if (!(year >= 1 && year <= 12) && (month >= 1 && month <= 12) && (day >= 1 && day <= GetMonthDay(year, month))) { cout << "非法日期" << endl; } } 析构函数 //~Date(); //拷贝构造函数 Date(const Date& d) { _year = d._year; _month = d._month; _day = d._day; } //赋值运算符重载 Date& operator=(const Date& d) { if (*this != d) { _year = d._year; _month = d._month; _day = d._day; } return *this; } void Print() { cout << _year << "-" << _month << "-" << _day << endl; } //==运算符重载 bool operator==(const Date& d) const; //>运算符重载 bool operator>(const Date& d) const; //>=运算符重载 bool operator>=(const Date& d) const; //<运算符重载 bool operator<(const Date& d) const; //<=运算符重载 bool operator<=(const Date& d) const; //!运算符重载 bool operator!=(const Date& d) const; //日期+=天数 Date& operator+=(int day); //日期+天数 Date operator+(int day) const; //日期-=天数 Date& operator-=(int day); //日期-天数 Date operator-(int day) const; //前置 Date& operator++(); //后置 Date operator++(int); //前置 Date& operator--(); //后置 Date operator--(int); //日期-日期 int operator-(const Date& d) const; private: int _year; int _month; int _day; };
Date.cpp
#include "Date.h" bool Date::operator==(const Date& d) const { return _year == d._year && _month==d._month && _day == d._day; } bool Date::operator>(const Date& d) const { 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; } return false; } //>=运算符重载 bool Date::operator>=(const Date& d) const { return (*this > d) || (*this == d); } //<运算符重载 bool Date::operator<(const Date& d) const { return !(*this >= d); } //<=运算符重载 bool Date::operator<=(const Date& d) const { return !(*this > d); } //!运算符重载 bool Date::operator!=(const Date& d) const { return !(*this == d); } //日期+=天数 Date& Date::operator+=(int day) { if (day < 0) { return *this -= abs(day); } _day += day; while(_day > GetMonthDay(_year, _month)) { _day -= GetMonthDay(_year, _month); ++_month; } if (_month == 13) { ++_year; _month = 1; } } //日期+天数 Date Date::operator+(int day) const { Date ret(*this); //拷贝构造 ret+= day; return ret; } //日期-=天数 Date& Date::operator-=(int day) { if (day < 0) { return *this += abs(day); } day -= _day; while (day <= 0) { --_month; if (_month == 0) { --_year; _month = 0; } _day += GetMonthDay(_year, _month); } } //日期-天数 Date Date::operator-(int day) const { Date ret(*this); ret -= day; return ret; } //前置 Date& Date::operator++() { *this += 1; return *this; } //后置 Date Date::operator++(int) { Date ret(*this); ret += 1; return ret; } //前置 Date& Date::operator--() { *this -= 1; return *this; } //后置 Date Date::operator--(int) { Date ret(*this); ret -= 1; return ret; } //日期-日期 int Date::operator-(const Date& d) const { Date max = *this; Date min = d; int flag = 1; if (*this < d) { max = d; min = *this; flag = -1; } int n = 0; while (max == min) { min++; ++n; } return n * flag; }
main.cpp
#include "Date.h"
int main()
{
Date d1;
Date d2(d1);
d2.Print();
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。