6.【CPP】Date类的实现
Date.h
#pragma once
using namespace std;
#include<iostream>class Date
{friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d);
public://构造函数会被频繁调用,放在类里面作为inlineDate(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;}//d1=d3Date& operator=(const Date& d)//引用作返回值,不用调用拷贝构造存临时变量{_year = d._year;_month = d._month;_day = d._day;return *this;}bool operator==(const Date& d)const;bool operator!=(const Date& d)const;bool operator>(const Date& d)const;bool operator>=(const Date& d)const;bool operator<(const Date& d)const;bool operator<=(const Date& d)const;//写在类中作为内联int GetMonthDay(int year, int month){static int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int day = days[month];if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))){day += 1;}return day;}Date operator+(int day);Date& operator+=(int day);Date& operator-=(int day);Date operator-(int day);Date& operator++(int);Date& operator++();Date& operator--(int);Date& operator--();int operator-(const Date& d)const;void PrintWeekDay()const;void Print()const;private:int _year;int _month;int _day;
};inline ostream& operator<<(ostream& out, const Date& d)
{out << d._year << "/" << d._month << "/" << d._day;return out;
}inline istream& operator>>(istream& in, Date& d)
{in >> d._year >> d._month >> d._day;return in;
}
Date.cpp
#include"Date.h"
using namespace std;//任何一个类,只需要写一个> ==或者< ==重载,剩下的运算符重载复用即可
bool Date::operator==(const Date& d)const
{return _year == d._year&& _month == d._month&& _day == d._day;
}bool Date::operator!=(const Date& d)const
{/*return _year != d._year|| _month != d._month|| _day != d._day;*/return !(*this == d);
}
bool Date::operator>(const Date& d)const
{return (_year > d._year)|| ((_year == d._year) && (_month > d._month))|| (_year == d._year) && (_month == d._month) && (_day > d._day);
}
bool Date::operator>=(const Date& d)const
{return (*this > d) || (*this == d);
}
bool Date::operator<(const Date& d)const
{return !(*this >= d);
}
bool Date::operator<=(const Date& d)const
{return !(*this > d);
}Date Date::operator+(int day)
{Date ret(*this);//拷贝构造//Date ret=*this;也是拷贝构造,不是赋值,因为开始变量不存在ret += day;return ret;
}
Date& Date::operator+=(int day)//支持连续加等,所以有返回值
{_day += day;while (_day > GetMonthDay(_year, _month)){_day -= GetMonthDay(_year, _month);++_month;if (_month==13){_year++;_month = 1;}}return *this;
}void Date::Print()const
{cout << _year <<"-" << _month<<"-" << _day << endl;
}Date& Date::operator-=(int day)
{_day -= day;while (_day <= 0){_month--;if (_month == 0){_year--;_month = 12;}_day += GetMonthDay(_year, _month);}return *this;
}
Date Date::operator-(int day)
{Date ret = (*this);ret -= day;return ret;
}Date& Date::operator++(int)
{Date ret(*this);*this += 1;return ret;
}
Date& Date::operator++()
{*this += 1;return *this;
}Date& Date::operator--(int)
{Date ret(*this);*this -= 1;return ret;
}
Date& Date::operator--()
{*this += 1;return *this;
}int Date::operator-(const Date& d)const//日期减日期
{//默认第一个大,第二个小Date max = *this;Date min = d;int flag = 1;if (*this < d){max = d;min = *this;flag = -1;}int count = 0;while (min != max){min++;count++;}return count * flag;
}void Date::PrintWeekDay()const
{const char* week[] = { "周一","周二","周三","周四","周五","周六","周日" };Date start(1900, 1, 1);int count = *this-start;cout << week[count % 7] << endl;
}相关文章:
6.【CPP】Date类的实现
Date.h #pragma once using namespace std; #include<iostream>class Date {friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d); public://构造函数会被频繁调用,放在类…...
三角形任意一外角大于不相邻的任意一内角
一.代数证明 ∵ 对与△ A C B 中 ∠ c 外接三角形是 ∠ B C D ∵对与△ACB中∠c外接三角形是∠BCD ∵对与△ACB中∠c外接三角形是∠BCD ∴ ∠ B C D π − ∠ C ∴∠BCD\pi-∠C ∴∠BCDπ−∠C ∵ ∠ A ∠ B ∠ C π ∵∠A∠B∠C\pi ∵∠A∠B∠Cπ ∴ ∠ B C D ∠ A ∠…...
【Spring Boot 3】【Redis】集成Lettuce
【Spring Boot 3】【Redis】集成Lettuce 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花…...
【SQL注入】SQLMAP v1.7.11.1 汉化版
下载链接 【SQL注入】SQLMAP v1.7.11.1 汉化版 简介 SQLMAP是一款开源的自动化SQL注入工具,用于扫描和利用Web应用程序中的SQL注入漏洞。它在安全测试领域被广泛应用,可用于检测和利用SQL注入漏洞,以验证应用程序的安全性。 SQL注入是一种…...
时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤)
时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤) 目录 时序预测 | MATLAB实现GRNN广义回归神经网络时间序列未来多步预测(程序含详细预测步骤)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现GRNN广义回归神经网络时间序列…...
长期戴耳机的危害有哪些?戴哪种耳机不伤耳朵听力?
长期佩戴耳机可能会出现听力下降、耳道感染等危害。 听力下降:长时间戴耳机可能会导致耳道内的声音过大,容易对耳膜造成一定的刺激,容易出现听力下降的情况。 耳道感染:长时间戴耳机,耳道长期处于封闭潮湿的情况下&a…...
C++中的预处理
一.预定义符号 1.__FILE__进行编译的源文件 2.__LINE__文件当前的行号 3.__DATE__文件被编译的日期 4.__TIME文件被编译的时间 5.__STDC__如果编译器遵循ANSIC,其值为1,否则未定义 二.#define 基本语法:#define 名字 内容 eg.define M 1 经#define定义的常量时不经过…...
flink 最后一个窗口一直没有新数据,窗口不关闭问题
flink 最后一个窗口一直没有新数据,窗口不关闭问题 自定义实现 WatermarkStrategy接口 自定义实现 WatermarkStrategy接口 窗口类型:滚动窗口 代码: public static class WatermarkDemoFunction implements WatermarkStrategy<JSONObject…...
mybatis----小细节
1、起别名 在MyBatis中,<typeAliases>元素用于定义类型别名,它可以将Java类名映射为一个更简短的别名,这样在映射文件中可以直接使用别名而不需要完整的类名。 下面是一个示例: 在mybatis核心配置文件中配置typeAliases标…...
解密Oracle数据库引擎:揭开数据存储的神秘面纱
目录 1、介绍Oracle数据库引擎 1.1 什么是Oracle数据库引擎 1.2 Oracle数据库引擎的作用和功能 1.3 Oracle数据库引擎的历史和发展 2、Oracle数据库引擎的体系结构 2.1 Oracle数据库实例的组成部分 2.2 Oracle数据库引擎的层次结构 2.3 Oracle数据库引擎的关键组件 3、…...
「HDLBits题解」Karnaugh Map to Circuit
本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 相关资料:卡诺图化简法-CSDN博客 题目链接:Kmap1 - HDLBits module top_module(input a,input b,input c,output out );assig…...
由于找不到d3dcompiler_43.dll缺失,无法打开软件的解决方法分享
d3dcompiler43.dll是什么文件?为什么会出现丢失的情况?又该如何解决呢?本文将详细介绍d3dcompiler43.dll的作用和影响,并提供6个有效的解决方法。 一、d3dcompiler43.dll是什么文件? d3dcompiler43.dll是DirectX SDK…...
现阶段Python和Java哪个更吃香?
现阶段Python和Java哪个更吃香? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&…...
基于DNA的密码学和隐写术综述
摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域,利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,该领域引起…...
【linux 多线程并发】多线程的控制,挂起线程暂停运行,直到唤醒线程,取消线程运行,可以设置合适的取消点属性避免不安全点被中止
线程运行控制 专栏内容: 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的情况…...
java转义字符
//转义字符的使用 public class ChangeChar{//编写一个main方法public static void main(String[] args){// \t :一个制表位,实现对齐的功能System.out.println("北京\t天津\t上海");// \n :换行符,实现换行System.out.println("jack\nsm…...
UDP服务器和客户端的创建步骤
UDP服务器的创建步骤: 一、创建用户数据报套接字(socket函数):通信域选择IPV4网络协议、套接字类型选择数据报式; int sockfd socket(AF_INET,SOCK_DGRAM,0); 二、填充服务器的网络信息结构体:1.定义网络…...
【问题记录】使用命令语句从kaggle中下载数据集
从Kaggle中下载Tusimple数据集 1.服务器环境中安装kaggle 使用命令:pip install kaggle 2.复制下载API 具体命令如下: kaggle datasets download -d manideep1108/tusimple3.配置kaggle.json文件 如果直接使用命令会报错: root:~# kagg…...
Centos 更换内核
文章目录 一、查看/更换系统内核1.1 查看当前运行环境的内核1.2 查看系统上所有可用内核1.3 切换内核方法一:通过启动菜单更换内核方法二:更换默认启动内核 二、安装内核2.1 使用ELRepo安装2.2 安装指定内核版本参考资料 一、查看/更换系统内核 1.1 查看…...
RestTemplate调用Http方法
场景:前端调用后端的接口完成设备参数的更新,后端在接口代码中需要调用设备端提供的接口来完成设备参数的更新。 RestTemplate 是用于同步client端访问 Restful 服务的一个核心类 默认使用 JDK 提供的包去建立HTTP连接 为每种 HTTP 请求都实现了相关的…...
Excel 技巧:一键批量填充空值
🚀 操作步骤选中区域首先,用鼠标选中包含空值的目标数据区域。定位空值按下快捷键 Ctrl G 打开“定位”对话框:点击左下角的 「定位条件...」。选择 「空值」。点击「确定」。✅ 此时,区域内所有空白单元格已被高亮选中。输入公式…...
BilibiliDown:B站音视频资源管理的全场景解决方案
BilibiliDown:B站音视频资源管理的全场景解决方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...
在给ppt接入扣子空间(Ai)/智能体,新玩法10分钟搞定说课,公开课AI互动!
做 PPT 时,你是否遇到过这些痛点:演讲中观众突然提问,临时组织语言容易逻辑混乱;同一问题被反复询问,浪费演示时间;静态页面无法按需补充细节,信息传递不精准。而扣子空间(Coze&…...
终极指南:RealChar语音识别技术深度对比——Whisper、Google Speech与本地部署方案
终极指南:RealChar语音识别技术深度对比——Whisper、Google Speech与本地部署方案 【免费下载链接】RealChar 🎙️🤖Create, Customize and Talk to your AI Character/Companion in Realtime (All in One Codebase!). Have a natural seaml…...
3步实现文件安全验证:HashCheck实战指南
3步实现文件安全验证:HashCheck实战指南 【免费下载链接】HashCheck HashCheck Shell Extension for Windows with added SHA2, SHA3, and multithreading; originally from code.kliu.org 项目地址: https://gitcode.com/gh_mirrors/ha/HashCheck 在数字化办…...
Android开发避坑指南:RecyclerView最后一行被截断的5种原因及对应解决方案
Android开发避坑指南:RecyclerView最后一行被截断的5种原因及对应解决方案 在Android应用开发中,RecyclerView作为列表展示的核心组件,其灵活性和高性能深受开发者喜爱。然而,在实际项目中,我们经常会遇到一个令人头疼…...
C语言文件操作实战:用fread和fwrite处理二进制数据的5个常见场景
C语言文件操作实战:用fread和fwrite处理二进制数据的5个常见场景 在嵌入式系统开发、游戏编程和工业控制等领域,二进制文件操作往往是数据持久化的核心手段。与文本文件相比,二进制格式能更精确地保存内存数据布局,避免字符编码转…...
LM386集成功放电路实战:从零搭建到波形调试全记录(附实测数据)
LM386集成功放电路实战:从零搭建到波形调试全记录(附实测数据) 在电子设计领域,音频功率放大器一直是基础却充满挑战的课题。LM386作为经典的集成功放芯片,以其低功耗、高增益和易用性著称,成为入门者和资深…...
3个实战场景:League-Toolkit如何帮你提升英雄联盟游戏体验
3个实战场景:League-Toolkit如何帮你提升英雄联盟游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在…...
技术小白也能懂:拆解一个chinahrt自动刷课油猴脚本的代码逻辑与实现原理
技术小白也能懂:拆解一个自动刷课油猴脚本的代码逻辑与实现原理 在数字化学习时代,许多在线教育平台要求用户完成指定课程才能获得相应证书或学分。对于时间紧张的学习者来说,手动完成所有课程视频观看可能成为负担。本文将从一个具体案例出…...
