【C++入门】7 类与对象中-日期类的实现

类和对象实战 —— 日期类的实现 日期类的实现 阅读详情

日期类的实现

Date.h文件

#pragma once
#include<iostream>
#include<assert.h>
using namespace std;

class Date
{
public:
	Date(int year = 1, int month = 1, int day = 1);
	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;

   //内联函数 GetMonthDay

	int GetMonthDay(int year, int month)const
	{
		assert(month > 0 && month < 13);
		static int monthdays[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;
		}
		return monthdays[month];
	}

	
	Date& operator+=(int day);
	Date operator+(int day)const;
	Date& operator-=(int day);
	Date operator-(int day)const;
	Date& operator++();
	Date operator++(int);
	Date operator--(int);
	Date& operator--();
	Date& operator=(const Date& d);


	//d1-d2
	int operator-(const Date&);

	bool CheackInvalid()const;

	void print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
	//友元声明

	friend ostream& operator<<(ostream& out, const Date& d);
	friend istream& operator>>(istream& in, Date& d);
private:
	int _year;
	int _month;
	int _day;

};
ostream& operator<<(ostream& out, const Date& d);
istream& operator>>(istream& in, Date& d);

Date.cpp文件 

#include"Date.h"

//构造函数
Date::Date(int year, int month, int day)
{
	_year = year;
	_month = month;
	_day = day;
}
//运算符重载

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

}
bool Date::operator<(const Date& d)const
{
	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)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);
}
bool Date::operator!=(const Date& d)const
{
	return !(*this == d);
}




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;
}

Date Date::operator+(int day)const
{
	Date tmp = *this;//这个语句是拷贝构造
	tmp += day;

	return tmp;
}



Date& Date::operator-=(int day)
{
	_day -= day;
	while (_day <= 0)
	{
		--_month;
		if (_month == 0)
		{
			--_year;
		}
		_day += GetMonthDay(_year, _month);
	}
	return *this;
}
Date Date:: operator-(int day)const
{
	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;
}
Date Date::operator--(int)
{
	Date tmp = *this;
	*this -= 1;
	return tmp;
}
Date& Date:: operator--()
{
	*this -= 1;
	return *this;
}
Date& Date:: operator=(const Date& d)
	{
		if (this != &d)
		{
			_year = d._year;
			_month = d._month;
			_day = d._day;
		}

		return *this;
	}
//d1-d2
int Date:: operator-(const Date& d)
{
	int flag = 1;
	Date max = *this;
	Date min = d;
	if (*this < d)
	{
		int falg = -1;
		Date max = d;
		Date min = *this;

	}
	int n = 0;
	while (min != max)
	{
		++min;
		++n;
	}
	return n * flag;
}


bool Date::CheackInvalid()const
{
	if (_year <= 0
		|| _month < 1 || _month>12
		|| _day<1 || _day>GetMonthDay(_year, _month))
	{
		return false;
	}
	else
	{
		return true;
	}



}

ostream& operator<<(ostream& out, const Date& d)
{
	out << d._year << "年" << d._month << "月" << d._day << "日" << endl;


	return out;
}
istream& operator>>(istream& in, Date& d)
{
	while (1)
	{
		cout << "请依次输入年月日:>";
		in >> d._year >> d._month >> d._day;

		if (!d.CheackInvalid())
		{
			cout << "输入错误,请重新输入" << endl;
		}
		else
		{
			break;
		}


	}
	return in;

}

test.cpp文件 

#include"Date.h"



int main()
{
	Date d1(2024, 5, 18);
	Date d2 = d1 + 30;

	d1.print();
	d2.print();

	d1 += 20;
	d1.print();
	d1 -= 40;
	d1.print();

	Date d4(2024, 1, 29);
	Date d5(2024, 8, 1);
	cout << d5 - d4 << endl;


	return 0;
}

测试结果 

AD(十四)调用已有的PCB元件封装库 软件:Altium Designer 16 需要资料:已有的PCB原理图文件(.PCBDOC)或者PCB库文件(.PCBLIB)(来源文中细说) 调用已有的PCB元件封装库(一)从已有的PCB原理图文件(*.PCBDOC)中调用1、PCB原理图文件来源2、打开已有的PCB原理图文件(*.PCBDOC)3、生成PCB封装库4、复制封装到工程文件下的PCB库文件(*.PCBLIB)5、重名问题(二)从已有的PCB库文件(*.PCBLIB)中调用1、PCB库文件(*.PCBLIB)的来源2、打开已有的PCB库 ( 阅读详情

相关推荐

第一篇:常见CAN错误帧及其排查方向

在本文中主要阐述各类错误帧的形成原因以及在使用同星硬件设备出现错误帧时,应当 如何进行排查并消除错误帧。在 CAN 总线通信中,通常遇见的错误帧主要为以下五种,其 分别是:bit error、ACK error、stuff error、CRC error 以及 form error。

u013089100的博客 1746

7.C++入门:类和对象|日期类的实现|取地址运算符重载|const成员函数|初始化列表|类型转换

本文实现了一个C++日期类Date,包含完整的日期运算功能。主要特性包括: 支持日期合法性检查,自动处理闰年情况 重载了所有比较运算符(<,>,==等) 实现了日期加减运算(+=,-=,+,-) 支持前后置自增/自减运算符(++,--) 重载了流运算符(<<,>>)实现日期输入输出 提供日期差值计算功能(d1-d2) 实现中特别注意了日期运算的边界情况处理,如跨年、跨月的日期加减,并采用静态数组存储每月天数以提高效率。测试用例展示了处理大数值日期加减的能力,验证了算法的正

ChoSeitaku的博客 712

保姆级教程:手把手教你下载和配置Waymo自动驾驶数据集(附百度网盘链接)

本文提供了一份详细的Waymo自动驾驶数据集下载和配置指南,特别针对国内研究者优化了数据获取方案,包括百度网盘链接和Google Cloud CLI配置。文章还涵盖了环境配置、数据处理实战、可视化分析以及进阶技巧,帮助开发者高效利用这一业界黄金标准数据集进行自动驾驶研究。

weixin_42651281的博客 368

【C++类和对象】日期类的实现

以上只是一个简单的日期类示例,实际的日期类可能还包括其他功能,例如日期的格式化等操作。这里只是提供了一个起点,大家可以根据自己的需求对日期类进行扩展

Renswc的博客 3051

从Axure转Figma?这篇编组、缩放、圆角、评论的对比指南帮你无缝切换

本文为资深Axure设计师提供了向Figma无缝迁移的实战指南。文章深度对比了编组、缩放、圆角、评论等核心操作,重点解析了Figma独特的自动布局、组件系统和实时协作功能,旨在帮助用户快速适应新工具,实现设计思维与工作效率的跃迁。

tomato的博客 851

平台跳跃游戏中的自动寻路,与地图导航扩展

平台游戏:主要的游戏方式是在2D平面上使用各种方式在悬浮平台上进行移动和穿过各种障碍。 现如的平台游戏中的平台特性与种类是很多的,像马里奥(FC)的单向支撑不可穿透的,或魂斗罗(FC)单向支撑可穿透的… \ 超级玛丽 魂斗罗 空洞骑士 蔚蓝 本博文 支撑 上 上 上 左、上、右 上 穿透 无 上、下 无 上(部分) 上下 所以本文主要以向上支撑并上下穿透的平台特性来进行实现 需求分析 在关卡设计后,地形的数据需要自动识别 地形中的平台可上下穿透移动,并可向上站立 平台的移动路..

MOV的博客 3062

【C++篇】C++类和对象实践篇——从零带你实现日期类的超详细指南

通过这篇博客,我们一步步深入探讨了 C++ 日期类的实现。在这个过程中,我们从基础的类定义与构造函数入手,逐渐学习了日期的合法性检查、运算符重载、日期的加减法以及日期之间的比较操作。特别是对于 > 运算符的重载,我们选择了友元函数来确保代码的对称性与封装性,同时避免了使用 getter 函数可能带来的冗余接口和维护成本。 这不仅是一次编程技巧的提升,也是面向对象思想在实际项目中的深入应用。通过实现一个日期类,我们充分理解了封装、代码复用与性能优化的重要性,并学习了如何通过 C++ 提供

半截诗的博客~ 2415

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 915

【C++】类和对象之操作运算符重载和日期类的实现

重载的知识和某个类的模拟实现

s_little_monster的博客 9879

DCM4CHEE Archive Light 应用配置-存储配置

本文介绍了在DICOM归档系统中配置和管理存储的方法,包括通过用户界面和LDAP导入两种方式。主要内容包括: 存储配置概述:用户可根据需求配置单个或多个存储设备,支持在磁盘空间不足或多任务并行时使用。存储分为Archive设备级(序列元数据存储)和Application Entity级(对象存储/元数据存储)。 用户界面操作: 设备级存储配置:通过菜单导航添加/编辑存储描述符,设置Storage ID、URI等关键参数 应用级存储引用:在设备扩展和网络AE中分别配置元数据和对象存储引用 LDAP配置方法:

洪城叮当的博客 1417

YOLOv11的代数不变量解释:Syzygy模分析特征重要性,用交换代数揭示卷积核的语义相关性

本文提出了一种基于代数几何与交换代数的创新方法,特别是运用Syzygy模理论,对YOLOv11目标检测算法的卷积核语义相关性进行数学解释。研究揭示了YOLO系列算法演进背后的代数结构特征,建立了网络组件与多项式环、理想簇等代数概念的对应关系。通过构建分层的准同构代数系统,分析了YOLOv11在不同尺度下保持语义不变性的数学本质。文章系统阐述了Syzygy模在CNN特征冗余分析、跨层依赖关系建模和语义聚类中的应用,并提出了适用于动态稀疏训练的改进算法。该理论框架为深度神经网络的解释性研究提供了新的数学工具,同

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1273

C++类和对象 练习小项目---日期类的实现.

为了更好的理解`C++`类和对象的知识,我们可以动手实现一下`C++`的一个简单的日期类,完成相应的函数,更好的帮助我们理解类和对象.

@初阶牛的博客 1006

触摸芯片RM1015B基本使用方法

RM1015B触摸芯片使用指南:该芯片采用4通道设计(实际使用3通道),通过I2C接口通信(设备地址0x2B)。硬件设计需注意中断/复位引脚复用,需上拉处理。软件配置包括初始化、中断处理和定时器扫描,通过设置各通道阈值(0-300W)调节灵敏度,值越小越灵敏。调试时可调用rm1015B_debug_func()输出波形数据。典型应用场景包括接近检测和手势识别,中断触发后需在8ms内响应。特别注意不同通道的寄存器映射关系及校准流程,确保检测准确性。

云淡风轻 180

【C++深入浅出】日期类的实现

通过前面两期类和对象的学习,我们已经对C++的类有了一定的了解。本期我们的目标是实现一个完整的日期类,通过实现日期类的构造函数、运算符重载等等内容,加深对前面知识的理解。实现了日期类之后,我们就相当于自己实现了一个网上的日期计算器,如计算几天后的日期,计算日期差。

忆梦初心的博客 1638

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【C++】C++类和对象实现日期类项目——时间计算器!!!

本文介绍如何使用C++类和对象实现一个日期计算器项目。项目功能包括日期加减运算、日期差值计算、日期比较以及输入输出重载。文章详细讲解了日期类的设计思路,包括成员变量定义、默认成员函数实现,以及关键运算符重载的逻辑。重点阐述了+=和-=运算符的重载实现,涉及月份天数计算、进位/退位处理以及负数情况的转换。同时介绍了如何通过重载<<和>>运算符实现日期类的直接输入输出。项目采用多文件结构组织代码,包含头文件声明和源文件实现,便于维护和扩展。该日期计算器可满足日常时间计算需求,如计算未来日

zore__的博客 1306

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C++】——类与对象(中)+日期类对象的实现

C++类与对象(中),主要讲解了6个默认成员函数并结合所学内容实现了一个完整的日期类对象

_Fiora的博客 808

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++使用类和对象实现日期类Date

本文详细讲解了C++中如何使用类和对象实现日期类Date,感兴趣的宝子们赶紧过来看看吧!!!

wer24_25的博客 1008

日期类的实现(C++编写练习类与对象)

日期类的实现(C++编写) 本篇目录日期类的实现(C++编写)1.类与对象:2.日期类的实现2.1类的结构2.2类的构造函数2.3类的析构函数2.4类的拷贝构造函数2.5运算符重载2.5.1赋值运算符重载2.5.2+=运算符重载2.5.2+运算符重载2.5.3-=/-运算符重载3.总结4.完整代码 1.类与对象: 类与对象主要叙述了类的构造和用法,三种访问方式,还有6个默认成员函数的原理作用及使用。这一节知识点不再叙述了,类的操作主要还是需要实践的。我们通过日期类的实现可以有效的锻炼类的使用。 2.日期类的

qq_43676757的博客 1927

C++入门篇3(类和对象【重点】)

C++入门篇3(类和对象【重点】)

Xpccccc的博客 2081

【C++】—— 类与对象(四)

类与对象之运算符重载

yusjushd的博客 1302

【C++】—— 日期类的实现

学了一些类和对象的知识大家是不是感觉云里雾里的今天我们就来一篇轻松一点的内容,来通过之前学过的知识,试写一个日期类,巩固一下之前的知识

2302_78420373的博客 1714

c++领域展开第七幕——类和对象(中篇 日期类的实现)超详细!!!!

日期类的实现

daily_233的博客 2181

C++类和对象实战:实现一个日期类

本文通过实现一个日期类,综合运用构造函数、运算符重载、友元函数等C++特性,帮助读者巩固面向对象编程知识。我们将实现日期的基本操作,包括日期比较、日期加减、流输入输出等功能。

有梦想的电信狗 859

C++第九弹---类与对象(六)

日期类的实现~~~

小林熬夜学习编程的博客 1854

【C++】实现日期类相关接口

本篇将介绍实现日期类中众多接口,同时这其中涉及到很多知识,务必将类和对象相关内容掌握再来实现日期类相关接口。

专注于 C/C++ 后端开发,涵盖基础语法、Linux系统与网络、MySQL数据库、常见算法及项目经验。 2096

【C++】实现日期类

今天呢我们来了解一下用类来实现日期类的计算,用来加强一下我们之前学的类那一块的知识点。包括类和对象以及友元函数等

jhj9201633的博客 1421
上一篇: 【C++入门】6 类与对象中-const成员
下一篇: 【C++入门】8 类与对象下-友元
Abstract_manner
博客等级 码龄3年 130粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值