#include <iostream> #include <assert.h> using namespace std; //int Month1[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //int Month2[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; ////闰年判断函数 // int Data::Leep_year(int year) // { // if ((year % 400) || ((year % 4) && !(year % 100))) // { // return 1; // } // else // { // return -1; // } // } //返回x月份的天数 int GetMonthDay(int year, int month) { assert(month > 0 && month < 13); static int monthArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int day = monthArray[month]; if ((month == 2) && (year % 400) || (year % 4 && year % 100)) { day += 1; } return day; } class Date { public: //声明display函数 void display(); //Data 构造函数 Date(int year = 1900, int month = 1, int day = 1) :_year(year) ,_month(month) ,_day(day) {} //重载 - 运算符 Date operator-(int n) { Date tmp(*this); tmp._day = tmp._day - n; if (n < 0) { return *this + (-n); } while (tmp._day <= 0) { if (tmp._month == 1) { tmp._month = 12; tmp._year = tmp._year - 1; } else { tmp._month = tmp._month - 1; } tmp._day = tmp._day + GetMonthDay(tmp._year, tmp._month); } return tmp; } //重载+运算符 Date operator+(int n) { Date tmp(*this); if (n >= 0) //n>=0的情况 { tmp._day = tmp._day + n; while (tmp._day > GetMonthDay(tmp._year,tmp._month)) { tmp._day = tmp._day - GetMonthDay(tmp._year, tmp._month); if (tmp._month == 12) //tmp.month=12,则tmp.month+1为1 { tmp._month = 1; tmp._year = tmp._year + 1; } else { tmp._month = tmp._month + 1; } } } else //n<0的情况 { return (*this - (-n)); } return tmp; } //重载+=运算符 Date& operator+=(int n) { *this = *this + n; return *this; } //重载-=运算符 Date& operator-=(int day) { *this = *this - day; return *this; } //重载前置++运算符 Date& operator++() { *this = *this + 1; return *this; } //重载后置++运算符 Date operator++(int) { Date tmp(*this); *this = *this + 1; return tmp; } //Date operator++(int) //{ // Date tmp(*this); // ++(*this); // return tmp; //} //重载前置--运算符 Date& operator--() { *this = *this - 1; return *this; } //重载后置--运算符 Date operator--(int) { Date tmp(*this); *this = *this - 1; return tmp; } //Date operator--(int) //{ // Date tmp(*this); // --(*this); // return tmp; //} //重载>运算符 bool operator>(const Date& d) { return (_year > d._year || (_year == d._year&&_month > d._month) || _year == d._year&&_month == d._month&&_day > d._day); } //bool operator>(const Date& d) //{ // if (_year > d._year) // { // return true; // } // else if (_year == d._year) // { // if (_month > d._month) // { // return true; // } // else if(_month == d._month) // { // if (_day > d._day) // { // return true; // } // } // } // return false; //} //重载==运算符 bool 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!=(Date& d) { return !(*this == d); } //重载<=运算符 bool operator<=(const Date& d) { return *this<d || *this==d; } //两个日期进行相减求值 int operator-(const Date& d) { int flag = 1; Date max = *this; Date min = d; if (*this < d) { min = *this; max = d; flag = -1; } int days = 0; while (min != max) { ++min; days++; //累加法 } return flag*days; } friend istream& operator>>(istream& is, Date& d); //声明友元函数 friend ostream& operator<<(ostream& os, const Date& d); //声明友元函数 private: int _year; int _month; int _day; }; //定义display函数 void Date::display() { cout << _year << "-" << _month << "-" << _day << endl; } //重载>>运算符 istream& operator>>(istream& is, Date& d) { cout<<"请输入一个日期的年月日:"; is>>d._year>>d._month>>d._day; return is; } //重载<<运算符 ostream& operator<<(ostream& os, const Date& d) { cout<<d._year<<"-"<<d._month<<"-"<<d._day<<endl; return os; } int main() { int year = 1900, month = 1, day = 1; while (1) { cout << "请输入起点日期: " << endl; cin >> year >> month >> day; Date d1(year, month, day); cout << "请输入天数:"; cin >> day; cout << "距离"<<day<<"天的日期是:" << endl; d1 = d1 + day; d1.display(); } system("pause"); return 0; }
C++ 实现 Date类(简单的日期计算器)
原创文章标签 Data 类 C++ 日期计算器 文章分类 代码人生
©著作权归作者所有:来自51CTO博客作者闻啼鸟的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:简单的5*5,五子棋小游戏
下一篇:C++ String类
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C++ | C++日期&时间
C++ | C++日期&时间C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时
c++ #include g++ ios -
C++计算书费
C++计算书费!
#include ios C语言 C -
C++计算短信资费
C++计算短信资费!
i++ ios #include C语言 C -
8 C++ Boost 日期 时间
8 C++ Boost 日期 时间
C++ 8 Boost