对于日期类,我们主要实现一下日期类的基本函数,构造,拷贝构造,运算符的重载,析构。当然这里运算符的重载需要实现的还是挺多的,如:=、<、>、<=、>=、等

#include <iostream>
using namespace std;class Date
{
public:Date(int year = 1990, int month = 1, int day = 1){_year = year;_month = month;_day = day;}Date(const Date& d){_year = d._year;_month = d._month;_day = d._day;}~Date(){}//万年历bool operator == (const Date& d){return this->_year == d._year&& this->_month == d._month&& this->_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 !(*this > d);}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 !(*this < d);}

对于实现日期计算器,我们主要考虑的是加天数和减天数,那么问题就来了,对于加法,如果加的日期超过当前月的天数就需要考虑月的进位,对于年来说,如果月份大于12就需要重置为1,年进位。还需要考虑的一个问题就是,是否为闰年的2月份天数不同,那么应该如何解决呢?我们用一个数组把每个月的天数给保存起来,然后写一个判断闰年的函数,如果是闰年就在数组对应的2月上加上1天。对于减法,就相当于加上一个负天数,问题和加法一样。

// 日期计算器Date operator+ (int day);Date operator+= (int day);Date operator- (int day){this->_day -= day;while (_day < 0){_day += GetMonthDay(2016, 3);_month -= 1;if (_month < 1){_month = 12;_year -= 1;}}return *this;}Date operator-= (int day);Date operator++();Date operator++(int);Date operator--();Date operator--(int);int operator-(const Date& d);//计算器Date& calendar(int day = 0){if (day > 0)//加正天数{this->_day += day;while (_day > GetMonthDay(2016, 2)){_day -= GetMonthDay(2016, 2);_month += 1;if (_month > 12){_month = 1;_year += 1;}}}else//加负天数{this->_day -= day;while (_day < 0){_day += GetMonthDay(2016, 3);_month -= 1;if (_month < 1){_month = 12;_year -= 1;}}}return *this;}private:bool IsLeapYear(int year){if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){return true;}return false;}int GetMonthDay(int year, int month){int monthArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int day = monthArray[month];if (month == 2 && IsLeapYear(year)){day += 1;}return day;}private:int _year;int _month;int _day;

转载于:https://blog.51cto.com/10740329/1765067

【C++】日期类+日期万年历+日期计算器相关推荐

  1. dateformat java 格式_java Date日期类和SimpleDateFormat日期类格式

    ~Date表示特定的时间,精确到毫秒 ~构造方法: public Date()//构造Date对象并初始化为当前系统的时间 public Date(long date) //1970-1-1 0:0: ...

  2. 构造一个日期类java_Java8 新日期时间类(1)

    Java.time 包的优势 使用Java8,新的日期时间API引入覆盖旧的日期时间API的以下缺点. 非线程安全 - java.util.Date不是线程安全的,因此开发者必须在使用日期处理并发性问 ...

  3. java 日期类代码_java 日期时间处理类

    import java.util.Calendar; import java.sql.Date; import java.text.SimpleDateFormat; import java.text ...

  4. date日期相减 java_03时间日期类

    Java8 在 java.time 包中增加了时间日期相关的API,弥补了 Java8 以前对日期.时间处理的不足. 在介绍Java8新的时间日期API前,先看看 java8 以前我们操作日期时间常用 ...

  5. java知识点八:时间日期类

    时间日期类 一.常用日期类 1.System类 2.Date类 3.SimpleDateFormat类 4.Calendar类 二.System类 比较常用的相关方法currentTimeMills( ...

  6. 【日期类问题】例2.1日期差值

    二 日期类问题 此类问题解题思路: 定一个锚点日期,如0年1月1日,先算出往后多少年内每一日子距离这个锚点的天数,例如要算两个日期间天数时,便可以将两个日期距离锚点日期之间的天数相减,即可得到. 题目 ...

  7. 三代日期类的基本使用

    三代日期类的基本使用 文章目录 三代日期类的基本使用 一.第一代日期类Date 二.第二代的日期类Calendar 二.第三代的日期类LocalDateTime 总结 一.第一代日期类Date Dat ...

  8. 日期类的实现(C++)

    目录 注意: 1.作用域 2.实例化 3.this指针 4.std 1).std是什么? 2).为什么将cout放到名字空间std中? 3).std都是什么时候使用? 5.C语言"/&quo ...

  9. 计算机数学相关课程设计,课程设计-日期类-小学生数学测验软件器.doc

    文档介绍: 目录课程设计任务书一.................................................................................... ...

  10. 2019-9-19【Javase】String字符串、装箱和拆箱、日期类、正则

    文章目录 一.字符串 1.String类 2.StringBuffer类 StringBuffer 和 StringBuilder区别: 二.装箱和拆箱 装箱和拆箱: 比较: 常用的功能: 三.日期类 ...

最新文章

  1. 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)
  2. 单点登陆_别再问我单点登陆
  3. JDFlipNumberView
  4. oracle反调试,突破前端反调试--阻止页面不断debugger
  5. android自带抓拍算法,Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍
  6. python的matplotlib库怎么安装_为Python安装matplotlib库
  7. centos 多台 文件夹同步_win10+OneDrive,同步备份文件最佳搭档,这样关闭自动备份通知...
  8. Codeforces Round #483 (Div. 1) A. Finite or not?
  9. paip.环境设置 mybatis ibatis cfg 环境设置
  10. NERSim v1.09a 1CD+HyperMILL 2018.1
  11. DIY多快充协议太阳能充电器!----BOOST升压电路
  12. 直流电动机调速matlab,基于MATLAB龙门刨床直流电动机调速系统仿真研究
  13. 华为:一个中国民族企业的“下半场”在哪里?
  14. 深度学习-8.实践方法论
  15. A*算法中二叉堆的使用
  16. 百度搜索算法全解析SEO课程笔记
  17. php 处理eml,php读取eml范例、php解析eml、eml解析成网页
  18. python 如何实现依据依存关系构造邻接矩阵(有向图)
  19. xinxin -QQ登录界面
  20. 2022年华数杯C题插层熔喷非织造材料的性能控制研究数学建模论文及程序

热门文章

  1. c语言酒店管理系统,C语言酒店管理系统.pdf
  2. java project 项目在 linux 下面部署步骤
  3. 算法优化策略之“中途相遇”算法思想
  4. Ubuntu 16.04安装Guake Terminal终端(使用一键唤醒功能)
  5. Android Activity和Fragment的生命周期图
  6. gulp排除已压缩文件思路
  7. util:properties/加载的配置文件中有中文导致乱码,如何通过分析源码解决问题?...
  8. 阿里云资源编排服务Python SDK使用入门
  9. BASE64Encoder
  10. 二逼平衡树 题解(树套树)