C++经典日期类实现

        学完C++类和对象以及四个默认成员函数,就可以来尝试自己实现一下日期类。完成日期类的各种功能,并加强自己的代码能力。

日期类实现

定义一个日期类

// 文件:Date.h
#pragma once
#include <iostream>
using std::cout;
using std::endl;//定义日期类
class Date
{
public://直接写到类里面的函数默认inline修饰//所以短小的代码最好可以直接在类里面定义//构造函数Date(int year, int month, int day){_year = year;_month = month;_day = day;}//缺省构造Date(){}//析构函数、拷贝构造、赋值运算符重载编译器自己实现//打印日期类void Print() {cout << "Date:" << _year << " " << _month << " " << _day << endl;}private://缺省赋值int _year = 0;int _month = 0;int _day = 0;
};

定义日期类的成员函数(方法)

// 文件:Date.h
class Date
{
public://...//逻辑运算符重载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 day);Date operator+(int day);//日期减天数Date& operator-=(int day);Date operator-(int day);//日期++// 为了区分前置++和后置++// 后置++运算符重载函数中加入int类型占位Date& operator++();		//前置++Date& operator++(int);		//后置++//...
}

实现日期类的功能

// 文件:Date.cpp
#include "Date.h"
//小于
bool Date::operator<(const Date& d)
{if (_year < d._year){return true;}else if (_year == d._year &&  _month < d._month){return true;}else if (_year == d._year && _month == d._month && _day < d._day){return true;}return false;
}
//等于
bool Date::operator==(const Date& d)
{if (_year == d._year && _month == d._month && _day == d._day)return true;return false;
}
//不等于
bool Date::operator!=(const Date& d)
{return !(*this == d);
}
//小于等于
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);
}int GetMonthDays(int year, int month)
{int common[13] = { 0, 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;}else{return common[month];}
}Date Date::operator+(int day)
{Date tmp = *this;tmp += day;return tmp;//Date tmp = *this;//tmp._day += day;//while (_day > GetMonthDays(tmp._year, tmp._month))//{//	day -= GetMonthDays(tmp._year, tmp._month);//	tmp._month++;//	if (tmp._month == 13)//	{//		tmp._month = 1;//		tmp._year++;//	}//}//return tmp;
}Date& Date::operator+=(int day)
{_day += day;while (_day > GetMonthDays(_year, _month)){_day -= GetMonthDays(_year, _month);_month++;if (_month == 13){_month = 1;_year++;}}return *this;
}Date& Date::operator-=(int day)
{_day -= day;while (_day < 0){_day += GetMonthDays(_year, _month - 1);_month--;if (_month == 0){_year--;_month = 1;}}if (_day == 0){_month--;_day = GetMonthDays(_year, _month);}return *this;
}Date Date::operator-(int day)
{Date tmp = *this;tmp -= day;return tmp;
}//前置++
Date& Date::operator++()
{*this += 1;return *this;
}
//后置++
Date& Date::operator++(int)
{Date tmp = *this;*this += 1;return tmp;
}

测试验证

// 文件:test.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "Date.h"int main()
{Date D1(2024, 3, 3);D1.Print();D1 -= 5;D1.Print();Date D2 = D1;D2.Print();D2++;D2.Print();return 0;
}

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

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

相关文章

C语言数组作为函数参数

有两种情形&#xff1b; 一种是数组元素作为函数实参&#xff1b;一种是数组名作为函数参数&#xff1b; 新建一个VC6单文档工程&#xff1b; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

Pthon图像处理Opencv初步:色彩转换、打开摄像头

文章目录 处理流程颜色空间二值图像摄像头 python图像处理教程&#xff1a;初步&#x1f4f7;插值变换&#x1f4f7;形态学处理&#x1f4f7;滤波 处理流程 opencv是跨平台图像处理库&#xff0c;为许多编程语言提供了接口&#xff0c;Python自然在列&#xff0c;但在使用pip…

32单片机基础:PWM驱动舵机,直流电机

PWM驱动舵机 接线图如上图所示。注意&#xff0c;舵机的5V 线不能接到面包板上的正极&#xff0c;面包板上的正极只有3.3V,是STM32提供的&#xff0c;所以要接到STLINK的5V, 我们如何驱动舵机呢&#xff1f;由之前我们介绍原理知道&#xff0c;要输出如下图对应的PWM波形才行…

AWTK 开源串口屏开发(11) - 天气预报

# AWTK 开源串口屏开发 - 天气预报 天气预报是一个很常用的功能&#xff0c;在很多设备上都有这个功能。实现天气预报的功能&#xff0c;不能说很难但是也绝不简单&#xff0c;首先需要从网上获取数据&#xff0c;再解析数据&#xff0c;最后更新到界面上。 在 AWTK 串口屏中…

数字革命的浪潮:Web3如何改变一切

随着数字技术的不断发展&#xff0c;人类社会正迎来一场前所未有的数字革命浪潮。在这个浪潮中&#xff0c;Web3技术以其去中心化、安全、透明的特性&#xff0c;正在逐渐改变着我们的生活方式、商业模式以及社会结构。本文将深入探讨Web3技术如何改变一切&#xff0c;以及其所…

volatile关键字的作用 以及 单例模式(饿汉模式与懒汉模式的区别及改进)

文章目录 &#x1f4a1;volatile保证内存可见性&#x1f4a1;单例模式&#x1f4a1;饿汉模式&#x1f4a1;懒汉模式&#x1f4a1;懒汉模式多线程版&#x1f4a1;volatile防止指令重排序 &#x1f4a1;volatile保证内存可见性 Volatile 修饰的变量能够保证“内存可见性”以及防…

解决连接工具Mobaxterm连接错误Connection timed out----VMware里Linux端口号固定

错误&#xff1a;Connection timed out 原因&#xff1a; 没有固定ip&#xff0c;网络断开&#xff0c;再次连接就是新的IP 解决&#xff1a; 再次测试连接&#xff0c;弹出这个就代表成功了

CUDA 中的线程组织

明朝那些事中有一句话&#xff1a;我之所以写徐霞客是想告诉你&#xff0c;所谓千秋霸业万古流芳&#xff0c;与一件事相比&#xff0c;其实都算不了什么&#xff0c;这件事情就是——用你喜欢的方式度过一生。 我们以最简单的 CUDA 程序&#xff1a;从 GPU 中输出 Hello World…

实现一个简单的哈希映射功能

说在前面 &#x1f388;哈希表大家应该都经常用到吧&#xff0c;那么大家有没有想过哈希表是怎么实现的呢&#xff1f;今天让我们一起从一道简单的题目来初步了解一个哈希表的简单原理。 目的 不使用任何内建的哈希表库设计一个哈希映射&#xff08;HashMap&#xff09;。 实…

bert 相似度任务训练完整版

任务 之前写了一个相似度任务的版本&#xff1a;bert 相似度任务训练简单版本,faiss 寻找相似 topk-CSDN博客 相似度用的是 0&#xff0c;1&#xff0c;相当于分类任务&#xff0c;现在我们相似度有评分&#xff0c;不再是 0,1 了&#xff0c;分数为 0-5&#xff0c;数字越大…

EasyRecovery易恢复2024免费文件数据恢复软件下载

一、软件概述 EasyRecovery易恢复中文文件数据恢复软件是一款专为中文用户设计的强大数据恢复工具。该软件致力于帮助用户从各种存储设备中恢复因各种原因丢失的中文文件&#xff0c;如文档、图片、视频、音频等。凭借其核心技术和多年的研发经验&#xff0c;EasyRecovery易恢…

C语言计算误码率

#include <stdio.h> #include <stdlib.h> bool dayintrue; //是否打印 int main(){ int i,k,g0; int n10,n20; int good0,bad0; double rate; (dayin)? printf("打印具体数据\n"):printf("不打印具体数据\n\n");…

STM32-SPI通信协议

串行外设接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线。 在某些芯片上&#xff0c;SPI接口可以配置为支持SPI协议或者支持I2S音频协议。 SPI接口默认工作在SPI方式&#xff0c;可以通过软件把功能从SPI模式切换…

Python·算法·每日一题(3月4日)最长公共前缀

题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例 2&#xff1a;…

【数据结构与算法】常见排序算法(Sorting Algorithm)

文章目录 相关概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 直接插入排序&#xff08;Insertion Sort&#xff09;3. 希尔排序&#xff08;Shell Sort&#xff09;4. 直接选择排序&#xff08;Selection Sort&#xff09;5. 堆排序&#xff08;Heap Sort&#xff09;…

【脑科学相关合集】有关脑影像数据相关介绍的笔记及有关脑网络的笔记合集

【脑科学相关合集】有关脑影像数据相关介绍的笔记及有关脑网络的笔记合集 前言脑模板方面相关笔记清单 基于脑网络的方法方面数据基本方面 前言 这里&#xff0c;我将展开有关我自己关于脑影像数据相关介绍的笔记及有关脑网络的笔记合集。其中&#xff0c;脑网络的相关论文主要…

【错误处理】【Hive】【Spark】ERROR FileFormatwriter: Aborting job null.

问题背景 近日&#xff0c;使用 Spark 在读写 Hive 表时发生了报错&#xff1a;Aborting job null&#xff0c;如果怎么都使用不了那张表的话&#xff0c;大概率是那张表有脏数据&#xff0c;导致整张表无法正常使用。 ERROR FileFormatwriter: Aborting job null.解决方法 …

SpringBoot 如何快速过滤出一次请求的所有日志?

前言 在现网出现故障时&#xff0c;我们经常需要获取一次请求流程里的所有日志进行定位。如果请求只在一个线程里处理&#xff0c;则我们可以通过线程ID来过滤日志&#xff0c;但如果请求包含异步线程的处理&#xff0c;那么光靠线程ID就显得捉襟见肘了。 华为IoT平台&#x…

《自然》:人工智能在创造性思维方面超越人类

发散性思维被认为是创造性思维的指标。ChatGPT-4 在三项有151名人类参与的**发散思维测试中&#xff0c;**展现出比人类更高水平的创造力&#xff0c;结果显示人工智能在创意领域持续发展。 发散性思维的特点是能够针对没有预期解决方案的问题提出独特的解决方案&#xff0c;例…

TOMCAT的安装与基本信息

一、TOMCAT简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c…