C++实现一个日期类
来源:互联网 发布:小米床垫怎么样 知乎 编辑:程序博客网 时间:2024/06/10 09:49
函数实现部分:
#include "Date.h"void Date::display(){ cout << _year << "-" << _month << "-" << _day << endl;}int GetMonthDay(int year, int month){ static int MonthDay[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (month == 2) { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { return MonthDay[month] - 1; } } return MonthDay[month];}bool Date::IsLegal(){ if ((_year >= 0) && (_month > 0) && (_month < 13) && (_day>0) && (_day <= GetMonthDay(_year, _month))) { return true; } else { return false; }}Date Date:: operator+(int day) //不改变初始日期的值{ if (day < 0) { return *this - (-day); } Date tmp = *this; tmp._day += day; while (tmp._day > GetMonthDay(tmp._year, tmp._month)) { tmp._day = tmp._day - GetMonthDay(tmp._year, tmp._month); if (tmp._month == 12) { tmp._month = 1; tmp._year += 1; } else { tmp._month += 1; } } return tmp;}Date & Date::operator+=(int day){ *this = *this + day; //代码的复用 return *this; }Date Date::operator-(int day) //减去多少天,不改变初始日期的值{ if (day < 0) //d1-(-100) { return *this + (-day); } Date tmp = *this; tmp._day = tmp._day - day; while (tmp._day <= 0) { if (tmp._month == 1) { tmp._month = 12; tmp._year -= 1; } else { tmp._month -= 1; } tmp._day = tmp._day + GetMonthDay(tmp._year, tmp._month); } return tmp;}bool Date:: operator==(const Date&d) //比较日期大小{ if ((_year != d._year) || (_month != d._month) || (_day != d._day)) { return false; } return true;}bool Date:: operator!=(const Date&d) //比较日期大小{ return !((*this).operator==(d));}Date & Date :: operator-=(int day) //减去多少天,改变初始日期的值{ *this = *this - day; return *this;}bool Date::operator> (const Date&d) //比较日期大小{ if ((this->_year>d._year) || ((this->_month>d._month)&&(this->_year==d._year)) ||((this->_day>d._day)&&(this->_month==d._month)&&(this->_year==d._year))) { return true; } return false;}Date Date:: operator++(int) //date++;{ Date tmp = *this; *this += 1; return tmp;}Date & Date:: operator++() //date++;{ *this += 1; return *this;}int Date::operator-(const Date&d) //两个日期相减相差多少天{ Date FutureDay; Date PastDay; int i = 0; if (*this > d) { FutureDay = *this; PastDay = d; } else { FutureDay = d; PastDay = *this; } while (FutureDay != PastDay) { PastDay += 1; i++; } return i;}
头文件声明部分:
#define _CRT_SECURE_NO_WARNINGS #ifndef __DATE_CLASS__#define __DATE_CLASS__#include <iostream>#include <windows.h>#include <assert.h>using namespace std;class Date{public: Date(int year=1995,int month=5 ,int day=6) :_year(year) , _month(month) , _day(day) { assert(IsLegal()); } void display(); //打印日期 Date operator+(int day); //加上多少天,不改变初始日期的值 Date & operator+=(int day); //加上多少天,改变初始日期的值 Date operator-(int day); //减去多少天,不改变初始日期的值 Date & operator-=(int day); //减去多少天,改变初始日期的值 bool operator>(const Date&d); //比较日期大小 bool operator==(const Date&d); //比较日期大小 bool operator!=(const Date&d); //比较日期大小 Date operator++(int); //date++; Date & operator++(); //++date; int operator-(const Date&d); //两个日期相减相差多少天 bool IsLegal(); //判断日期是否合法private: int _year; int _month; int _day;};
测试用例:
#include "Date.h"int main(){ Date d(2017,3,8); Date d1 = d + 100; d.display(); d1.display(); Date d2(2017, 3, 8); d2 += 100; d2.display(); Date d3 = d2 - (-100); d3.display(); Date d4 = d3 + (-100); d4.display(); int k=d3 > d4; cout << k << endl; Date d5 = d4; (d5++).display(); (++d5).display(); int a = d3 - d4; cout << a << endl; system("pause"); return 0;}
运行结果:
总结:
在实现日期类的时候要注意代码的复用+简洁,以及什么时候能够返回一个值的引用来使函数的效率更高(不能返回指向栈内存的引用和指针),这些都是需要注意的,以及函数的重载的理解(函数名可以相同,参数的类型不同或者参数的个数不同(参数列表不同),返回值可同可不同)。
0 0
- c++::实现一个日期类
- C++ 实现一个日期类
- C++实现一个日期类
- C++实现一个日期类
- c++实现一个日期类
- C++实现一个日期类
- C++:日期类的实现
- 【c++】日期类的实现
- 【C++】模拟实现一个日期类,实现基本重载运算符等
- 用C/C++实现一个日期类,重载运算符=,==,+,-,++,--,>,>=,<,<=等
- 类实现一个简单的日期计算器
- 实现一个日期计算器
- 【c++】实现一个类
- Date日期类的实现(C++)
- 实现一个日期选择插件
- 一个好用的日期时间类(c++)
- 【c++】实现一个复数类
- 【C++】日期类+日期万年历+日期计算器
- linux下svn使用小结 创建 添加仓库 版本管理
- iBET Slot Games Rebate 1% Unlimited Bonus(iBET, iBET Promotion, Online Casino Malaysia, Online Casin
- 2.1实现将一组整数进行升序排列
- RESTful架构
- 自动更新ListView时遇到onScrollStateChanged不执行的问题
- C++实现一个日期类
- Android App优化之性能分析工具
- OpenSessionInViewFilter原理以及为什么要用OpenSessionInViewFilter
- js 组件的开发步骤
- 第三周作业(图论--BFS与DFS相关)
- 矩阵快速幂模板
- 用gulp打包发布项目
- Cartographer理论及实现浅析--泡泡机器人原创专栏
- CAS 5.0.3.1部署