日期类比较大小和加减

日期比较大小

先定义一个日期类,这里包含年月日,这里头文件和源文件分离

重载符号

1.operator>

先声明函数

这里大于可以把*this> d 的情况全部列举出来

bool date::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;
}

最开始的麻烦点后面全部复用

2. operator>=

bool date::operator>=(const date& d)
{return *this > d || *this == d;
}

3.operator<

bool date::operator<(const date& d)
{return !(*this >= d);
}

4.operator<=

bool date::operator<=(const date& d)
{return !(*this > d);
}

5.operator==

bool date:: operator==(const date& d)
{return _year == d._year && _month == d._month && _day == d._day;
}

6.operator!=

bool date:: operator!=(const date& d)
{return !(_year == d._year && _month == d._month && _day == d._day);}

 

日期加减

operator+=

date& date::operator+=(int n)
{if (n < 0){return *this -= -n;}_day = _day + n;while (_day > GetMonthDay(_year, _month)){if (_day > GetMonthDay(_year, _month)){_day = _day - GetMonthDay(_year, _month);_month++;if (_month > 12){_month = 1;_year++;}}}return *this;
}

operator+

date date::operator+(int n)
{date tmp = *this; tmp += n;return tmp;
}

operator-=

date& date::operator-=(int n)
{if (n < 0){return *this += -n;}_day = _day - n;while (_day<=0){_month--;if (_month == 0){_month = 12;_year--;}_day = _day + GetMonthDay(_year, _month);}return *this;
}

operator- 

date date::operator-(int n)
{date tmp = *this;tmp -= n;return tmp;
}

operator前置++

date& date::operator++()
{*this += 1;return *this;
}

operator后置++

date date::operator++(int)
{date tmp = *this;*this += 1;return tmp;
}

为了区分后置++需要加个int来重载

 日期-日期

int date::operator-(const date& d)
{date max = *this;date min = d;int flag = 1;if (*this < d){max = d;min = *this;flag = -1;}int day = 0;while (max != min){++min;++day;}return day * flag;
}

 完整代码

 

//date.h
#pragma once
#include<bits/stdc++.h>
using namespace std;
class date
{
public://date();date(int year=1, int month=1, int day=1);~date();date& operator=(const date& d);bool operator>(const date& d);bool operator>=(const date& d);bool operator<(const date& d);bool operator<=(const date& d);bool operator==(const date& d);bool operator!=(const date& d);date& operator+=(int n);date operator+(int n);date& operator-=(int n);date operator-(int n);date& operator++();//前置++date operator++(int);//后置++date& operator--();date operator--(int);int operator-(const date& d);void print();
private:int _year;int _month;int _day;																			
};
int GetMonthDay(int year, int month);
//date.cpp
#include"date.h"
//date::date()
//{
//	_year = 0;
//	_month = 0;
//	_day = 0;
//}
void date::print()
{cout << _year << "-" << _month << "-" << _day;cout << endl;
}
date::date(int year ,int month ,int day)
{_year = year;_month = month;_day = day;
}
date::~date()
{;
}bool date::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 date::operator>=(const date& d)
{return *this > d || *this == d;
}
bool date::operator<(const date& d)
{return !(*this >= d);
}
bool date::operator<=(const date& d)
{return !(*this > d);
}bool date:: operator==(const date& d)
{return _year == d._year && _month == d._month && _day == d._day;
}
bool date:: operator!=(const date& d)
{return !(_year == d._year && _month == d._month && _day == d._day);}
date& date::operator=(const date& d)
{_year = d._year;_month = d._month;_day = d._day;return *this;}
int GetMonthDay(int year, int month)
{int arr[] = { -1,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){return 29;}return arr[month];
}date& date::operator+=(int n)
{if (n < 0){return *this -= -n;}_day = _day + n;while (_day > GetMonthDay(_year, _month)){if (_day > GetMonthDay(_year, _month)){_day = _day - GetMonthDay(_year, _month);_month++;if (_month > 12){_month = 1;_year++;}}}return *this;
}
date date::operator+(int n)
{date tmp = *this; tmp += n;return tmp;
}
date& date::operator-=(int n)
{if (n < 0){return *this += -n;}_day = _day - n;while (_day<=0){_month--;if (_month == 0){_month = 12;_year--;}_day = _day + GetMonthDay(_year, _month);}return *this;
}
date date::operator-(int n)
{date tmp = *this;tmp -= n;return tmp;
}date& date::operator++()
{*this += 1;return *this;
}
date date::operator++(int)
{date tmp = *this;*this += 1;return tmp;
}
date& date::operator--()
{*this -= 1;return *this;
}date date::operator--(int)
{date tmp = *this;*this -= 1;return tmp;
}int date::operator-(const date& d)
{date max = *this;date min = d;int flag = 1;if (*this < d){max = d;min = *this;flag = -1;}int day = 0;while (max != min){++min;++day;}return day * flag;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/398147.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总要去趟沙漠吧:中卫沙坡头

周五 下班出发 西安 -> 固原 周六 疯狂的一天 陕甘宁蒙 沙坡头 集大漠、黄河、高山、绿洲为一处&#xff0c;具西北风光之雄奇&#xff0c;兼江南景色之秀美。有中国最大的天然滑沙场&#xff0c;有横跨黄河的“天下黄河第一索”&#xff0c;有黄河文化代表古老水车&#…

观测云突变告警,精准预测云原生的系统异常

背景 观测云 DataKit 是一个强大的数据采集工具&#xff0c;能够收集和监控容器化环境和 Kubernetes 集群的指标、对象和日志数据。通过灵活使用 DataKit 收集的数据&#xff0c;可以对 Kubernetes 集群进行深入的监控和分析&#xff0c;从而实现更好的运维和优化。以下是一些…

FRTIMP_YTFRB_WEB

FRTIMP_YTFRB_WEB 林业资源交易信息管理平台

Docker相关配置记录

Docker相关配置记录 换源 {"registry-mirrors": ["https://dockerhub.icu","https://docker.chenby.cn","https://docker.1panel.live","https://docker.awsl9527.cn","https://docker.anyhub.us.kg","htt…

网络通信之套接字

TCP服务端代码实现 #include<myhead.h> #define SER_POST 6666 //服务器端口 #define SER_IP "192.168.36.172"//服务器ip int main(int argc, const char *argv[]) {//1.创建套接字int sfd socket(AF_INET,SOCK_STREAM,0);//参数1&#xff1a;通信域//参数2…

零基础5分钟学会谷歌云GCP核心云架构技能 - 成本分析篇

简介&#xff1a; 欢迎来到小李哥谷歌云GCP云计算知识学习系列&#xff0c;适用于任何无云计算或者谷歌云技术背景的开发者&#xff0c;让大家零基础5分钟通过这篇文章就能完全学会谷歌云一个经典的服务开发架构方案。 我将每天介绍一个基于全球三大云计算平台&#xff08;AW…

AI赋能周界安防:智能视频分析技术构建无懈可击的安全防线

周界安全防范是保护机场、电站、油库、监狱、工业园区等关键设施免受非法入侵和破坏的重要措施。传统的周界安防手段主要依靠人员巡查和物理屏障&#xff0c;但这种方式不仅人力成本高&#xff0c;而且效率较低&#xff0c;难以满足日益复杂多变的安全需求。随着AI技术的引入&a…

windows10和linux(debian12)设置静态ip————附带详细过程

文章目录 0 背景1 linux&#xff08;debian&#xff09;1.1 查看网络配置1.2 获取ip动态分配下的配置1.3 打开网络配置文件1.4 重新启动网络服务1.5 验证设置 2 windows2.1 查看自动获取ip地址下的配置2.2 进行设置 0 背景 因为下位机只能获取固定的ip&#xff08;ip池很小&am…

QT自定义系统快捷键任务

关键代码 //自定义快捷键检测 connect(this->ui->hotkeySequenceEdit_1, &QKeySequenceEdit::keySequenceChanged,this, &HotTestWidget::setShortcut_1);// 托盘显示 trayIcon new QSystemTrayIcon(this); QPixmap pixmap("tray.png"); QIcon icon(…

【网络】IP和MAC地址的映射——ARP协议和ARP欺骗概述

目录 引言 ARP的工作机制 ARP欺骗 ARP欺骗的断网行为 ARP欺骗成为中间人 工具介绍 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 同一子网内不同主机用数据链路层的MAC地址来寻址&#xff0c;而不是子网内的私有IP&#xff08;网络层&#xff09;。数据包中的IP…

JDBC如何避免SQL注入

JDBC如何避免SQL注入 一 . 什么是SQL注入 SQL注入&#xff08;SQL Injection&#xff09;是一种代码注入技术&#xff0c;它允许攻击者将或“注入”恶意的SQL命令到后端数据库引擎执行。这些恶意的SQL命令可以执行未授权的数据库查询、修改数据、管理数据库服务器上的文件系统…

三级_网络技术_20_路由器的配置及使用

1.封禁ICMP协议&#xff0c;只转发212.78.170.166/27所在子网的所有站点的ICMP数据包&#xff0c;正确的access-list配置是()。 Router (config)#access-list 110 permit icmp 212.78.170.166 0.0.0.0 any Router (config)#access-list 110 deny icmp any any Router (confi…

day2-网络连接网卡配置原理

1.window网卡 理解&#xff1a; window 有 2 块网卡 本地网卡 192.168.13.253 用于连接外网 vmnet8 10.0.0.1(装虚拟机自动生成的 如果没有自动生成…) 虚拟机添加 2 块网卡&#xff1a; 第一块网卡 NAT 模式 添加网卡的时候设置 NAT 模式 2 个作用&#xff0c;用于连接 wi…

C++_继承

继承 基础认识 像模板是函数和类代码的复用&#xff0c;而继承是对类代码的复用&#xff0c;都是更多的把复杂的任务交给编译器处理。 使用方法 继承的方式 class的默认继承方式是private&#xff0c;struct的默认继承方式是public&#xff0c;但还是最好加上。 protected成…

C++ 函数模板和类模板

参考视频&#xff1a;C类模板_哔哩哔哩_bilibili 遗留问题&#xff1a;编译器怎么处理函数模板和类模板 目录 一、为什么会有函数模版&#xff1f;函数模板是为了解决什么问题&#xff1f; 二、函数模板的概念 三、函数模版的使用 四、函数模板的特化 五、类模板的概念 …

基于ssm+vue+uniapp的英语学习交流平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

排序算法之桶排序

title: 桶排序 date: 2024-7-25 18:58:19 0800 categories: 排序算法 tags:排序算法桶排序 description: 桶排序&#xff08;bucket sort&#xff09;是分治策略的一个典型应用。它通过设置一些具有大小顺序的桶&#xff0c;每个桶对应一个数据范围&#xff0c;将数据平均分配…

Qt—Qtcreator中自定义类时,下拉菜单中没有出现要继承的Qt类

问题描述&#xff1a;Qtcreator中自定义类时&#xff0c;下拉菜单中没有出现要继承的Qt类 这里我想要继承 QLineEdit 类&#xff0c;但是在这个下拉菜单中没有找到 我认为这个是qtcreator版本的问题&#xff0c;因为我直接去 #include 是可以找到这个类的 直接创建出来的类中…

Python Flask 与 Node.js Express

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 构建 Web 应用程序时&#xff0c;选择正确的框架对于性能和可扩展性至关重要。Python 的 Flask 和 Node.js 的 Express 是两种流行的选择&#xff0c;它们根据项目…

重启人生计划-勇敢者先行

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 如果你觉得这个【重启人生…