C++实现日期类(Date类)的方法

发布时间 - 2026-01-10 22:26:21    点击率:

如下所示:

#include<iostream>
using namespace std;
class Date
{
public:
  Date(int year = 1900, int month = 1, int day = 1)  //构造
  :_year(year)
  , _month(month)
  , _day(day)
  {
    if (!isInvalidDate(_year, _month, _day))
    {
      _year = 1900;
      _month = 1;
      _day = 1;
    }
  }
  
  Date operator+(int count)
  { 
    Date tmp(*this);
    tmp._day += count;
    ToCorrect(tmp);
    return tmp;
  }
  Date operator-(int count)
  {
    Date tmp(*this);
    tmp._day -= count;
    ToCorrect(tmp);
    return tmp;
  }
  
  Date& operator++()  //前置++
  {
    (*this)++;
    return *this;
  }
  Date operator++(int)  //后置++
  {
    Date tmp(*this);
    (*this)+=1;
    return tmp;
  }
  Date& operator--()
  {
    (*this)--;
    return *this;
  }
  Date operator--(int)
  {
    Date tmp(*this);
    (*this)--;
    return tmp;
  }
  int operator-(const Date &d)
  {
    int flag = 1;
    Date max = *this;
    Date min = d;
    if (*this<d)
    {
      max = d;
      min = *this;
      flag = -1;
    }
    int count=0;
    while (min != max)
    {
      ++min;
      count++;
    }
    return count*flag;
  }
  Date& operator+=(int day)
  {
    *this = *this + day;
    return *this;
  }
  bool operator!=(const Date &d)
  {
    return !(*this == d);
  }
  bool operator<(const Date &d)
  {
    return !((*this>d)||(*this==d));
  }
  bool operator>=(const Date &d)
  {
    return !(*this<d);
  }
  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)
  {
    return ((_year == d._year) && (_month == d._month) && (_day == d._day));
  }
  
public:  
  bool IsLeapYear(int year)
  {
    if(year % 400 || (year % 4 && year % 100))
      return true;
    return false;
  }
  int YearsOfMonth(int year, int month)
  {
    int day;
    int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    day = days[month];
    if (month == 2)
      day += IsLeapYear(year);
    return day;
  }
  
  Date ToCorrect(Date &d)
  {
    if (d._day>YearsOfMonth(d._year, d._month))
    {
      while (d._day > YearsOfMonth(d._year, d._month))
      {
         d._day -= YearsOfMonth(d._year,d._month);

        if (d._month == 12)
        {
          d._year++;
          d._month = 1;
        }
        else
        {
          ++d._month;
        }
      }
    }
    else
    {
      while (d._day <= 0)
      {
        if (d._month == 1)
        {
          d._year--;
          d._month = 12;
        }
        else
        {
          --d._month;
        }
        d._day += YearsOfMonth(d._year, d._month);
      }
    }
    return d;
  }
  

  bool isInvalidDate(int year, int month, int day)
  {
    if ((year < 1) || (month<0 || month>12) || (day<0 || day>YearsOfMonth(year,month)))
      return false;
    return true;
  }
  void Display()
  {
    cout << _year << "-" << _month << "-" << _day << endl;
  }
  friend istream& operator>>(istream& is, Date &d);
  friend ostream& operator<<(ostream& os, const Date &d);
private:
  int _year;
  int _month;
  int _day;
};
istream& operator>>(istream& is, Date& d)
{
  cout << "请输入一个日期" << endl;
  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()
{
  /*Date d1(2016,8,18);
  //d1.Display();

  //d1 = d1++;
  cout << d1 << endl;*/

  //Date d1(2015, 12, 3);
  //(d1++).Display(); //d1.operator++(&d1, 0);
  //(++d1).Display(); //d1.operator++(&d1);

  Date d1(2015, 12, 3);
  Date d2(2015, 11, 1);
  cout << (d1 - d2) << endl;

  //Date d1(2015, 12, 3);
  //Date ret = d1 + 40; //operator+
  //ret.Display();


  /*Date d1(2015, 12, 3);
  Date ret = d1 + 40;
  d1 = ret;
  ret = d1 - 40;
  ret.Display();*/
  
  /*Date ret;
  Date d2(2015, 1, 1);
  ret = d2 - 1;
  ret.Display();*/
  return 0;
}

以上这篇C++实现日期类(Date类)的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# C++  # 日期类  # Date类  # C++日期类计算器的模拟实现举例详解  # C++实现日期类的示例详解  # C++日期类(Date)实现的示例代码  # C++类与对象之日期类的实现  # C++实现日期类(Date)  # C++ 如何实现一个日期类  # 给大家  # 希望能  # 请输入  # 所示  # 这篇  # 小编  # 大家多多  # day  # month  # _month  # _year  # int  # public  # year  # count  # operator  # ToCorrect  # tmp  # _day  # amp 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速生成凡客建站的专业级图册?  Laravel如何实现API版本控制_Laravel版本化API设计方案  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何构建满足综合性能需求的优质建站方案?  深入理解Android中的xmlns:tools属性  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  EditPlus中的正则表达式 实战(2)  音乐网站服务器如何优化API响应速度?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何在腾讯云免费申请建站?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  如何挑选高效建站主机与优质域名?  如何在景安云服务器上绑定域名并配置虚拟主机?  Python文件异常处理策略_健壮性说明【指导】  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  西安专业网站制作公司有哪些,陕西省建行官方网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  装修招标网站设计制作流程,装修招标流程?  如何用搬瓦工VPS快速搭建个人网站?  微信小程序 wx.uploadFile无法上传解决办法  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel Fortify是什么,和Jetstream有什么关系  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在万网自助建站中设置域名及备案?  大同网页,大同瑞慈医院官网?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel如何自定义分页视图?(Pagination示例)  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  电商网站制作价格怎么算,网上拍卖流程以及规则?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  大连 网站制作,大连天途有线官网?  如何用好域名打造高点击率的自主建站?  实例解析angularjs的filter过滤器  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  佛山网站制作系统,佛山企业变更地址网上办理步骤?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何快速生成可下载的建站源码工具?