日期类的实现,const成员

目录

一:日期类实现

二:const成员

三:取地址及const取地址操作符重载


一:日期类实现

//头文件

#include <iostream>
using namespace std;

class Date
{
	friend ostream& operator<<(ostream& out, const Date d);
	friend istream& operator>>(istream& in, const Date d);
public:
	Date(int year = 1900, int month = 1, int day = 1);

	void Print()
	{
		cout << "年 " << _year << "月 " << _month<<"日 " << _day << endl;
	}

	//得到对应年月的天数
	int GetMonthDay(int year, int month)
	{
		static int day[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };

		if(month == 2 &&((year%100 != 0&& year%4==0) || (year % 400 == 0)))
			return day[month]+1;
		else
			return day[month];
	}

	bool CheckDay();

	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;

	Date& operator+=(int day);
	Date operator+(int day);

	Date& operator-=(int day);
	Date operator-(int day);

	Date operator++();
	Date operator++(int);

	Date operator--();
	Date operator--(int);

	int operator-(const Date d);

private:
	int _year;
	int _month;
	int _day;
};

ostream& operator<<(ostream& out, const Date d);
istream& operator>>(istream& in, const Date d);
//实现

#include "Date.h"

Date::Date(int year, int month, int day)
{
	_year = year;
	_month = month;
	_day = day;
}

bool Date::CheckDay()
{
	if (_month > 12 || _month < 0 || _day <0 || _day > GetMonthDay(_year, _month))
		return false;
	else
		return true;

}

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)
		{
			return _day < d._day;
		}
	}
	
	return false;
}

bool Date::operator<=(const Date d)const
{
	return ((*this) < d) || ((*this) == d);
}

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 ((*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)
{
	if (day < 0)
		return (*this) -= -day;

	_day += day;
	while (_day > GetMonthDay(_year, _month))
	{
		_day -= GetMonthDay(_year, _month);
		_month++;

		if (_month > 12)
		{
			_year++;
			_month = 1;
		}
	}

	return (*this);
}
Date Date::operator+(int day)
{
	Date tmp = *this;
	tmp += day;

	return tmp;
}


Date& Date::operator-=(int day)
{
	if (day < 0)
		return (*this) += -day;

	_day -= day;

	while (_day <= 0)
	{
		if (_month--  < 1)
		{
			_month = 12;
			_year--;
		}

		_day += GetMonthDay(_year, _month);
	}

	return (*this);
}
Date Date::operator-(int day)
{
	Date tmp = *this;
	tmp -= day;

	return tmp;
}

Date Date::operator++()
{

	return (*this) += 1;
}
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)
{
	int flag = 1;
	int n = 0;
	//假设d1 大, d2小
	Date d1 = *this;
	Date d2 = d;

	if (d1 < d2)
	{
		flag = -1;
		d1 = d;
		d2 = *this;
	}

	while (d1 != d2)
	{
		n++;
		d2++;
	}

	return n * flag;
}

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

	return out;
}

istream& operator>>(istream& in, const Date d)
{
	cout << "请输入年月日->";

	in >> d._year >> d._month >> d._day;
	
	return in;
}

二:const成员

const 修饰的 成员函数 称之为 const 成员函数 const 修饰类成员函数,实际修饰该成员函数
隐含的 this 指针 ,表明在该成员函数中 不能对类的任何成员进行修改。
class Date
{
public:
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	//void Print(Date* const this)  本身指向的对象是不能修改的,但是指向的内容可以改 
	void Print()
	{
		cout << "年" << _year << endl;
		cout << "月" << _month << endl;
		cout << "日" << _day << endl;
	}

	//void Print(const Date* const this)  本身指向的对象 和 指向的对象的内容 都不可以修改
	void Print()const
	{
		cout << "年" << _year << endl;
		cout << "月" << _month << endl;
		cout << "日" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1(2024, 4, 28);
	d1.Print();

	Date d2(2024, 4, 27);
	d2.Print();

	return 0;
}

三:取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
class Date
{
public:
	Date* operator&()
	{
		return this;
	}

	const Date* operator&()const
	{
		return this;
	}
private:
	int _year;
	int _month;
	int _day;
};
这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需
要重载,比如 想让别人获取到指定的内容!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql定时执行语句

一、前提 #确保事件调度为开放(ON) SHOW VARIABLES LIKE event_scheduler;二、场景 1、创建test01 表&#xff0c;表中存储1000条数据&#xff1b; 2、创建空表test02&#xff0c;表结构与 test01相同&#xff1b; 3、将test01中的数据以每分钟10条的形式转移到test02中去三、…

基于Spring Boot的校园博客系统设计与实现

基于Spring Boot的校园博客系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统功能界面图&#xff0c;在系统首页可以查看首页、文…

Java面试八股之简述Java中assert的作用

简述Java中assert的作用 Java中的assert关键字用于在代码中插入断言&#xff08;Assertion&#xff09;&#xff0c;断言是一种在开发和测试阶段用于验证程序内部状态或假设的机制。其主要作用包括&#xff1a; 条件检查&#xff1a; assert语句用于在特定代码点上检查一个布…

Microsoft Universal Print 与 SAP 集成教程

引言 从 SAP 环境打印是许多客户的要求。例如数据列表打印、批量打印或标签打印。此类生产和批量打印方案通常使用专用硬件、驱动程序和打印解决方案来解决。 Microsoft Universal Print 是一种基于云的打印解决方案&#xff0c;它允许组织以集中化的方式管理打印机和打印机驱…

python u是什么意思

u&#xff1a;表示unicode字符串&#xff0c;默认模式&#xff0c;里边的特殊字符会被识别。 作用&#xff1a;后面字符串以unicode格式进行编码&#xff0c;一般用在中文字符串前面&#xff0c;防止因为源码储存格式问题&#xff0c;导致再次使用时出现乱码。 用法&#xff…

基于springboot实现迪迈手机商城设计系统项目【项目源码+论文说明】

基于springboot实现迪迈手机商城设计系统演示 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。…

【RAG 博客】RAG-Fusion:引入 Multi-Query 来丰富用户查询的结果

Blog&#xff1a;Forget RAG, the Future is RAG-Fusion ⭐⭐⭐⭐ Code&#xff1a;github.com/Raudaschl/rag-fusion 文章目录 一、RAG-Fusion 的工作机制二、实现细节2.1 Multi-Query Generation2.2 Reciprocal Rank Fusion&#xff08;RRF&#xff09;2.3 Generative Output…

JSON教程(非常详细)

参考文章来源&#xff1a;JSON教程&#xff08;非常详细&#xff09; 目录 JSON JSON 发展史 为什么要使用 JSON&#xff1f; JSON 的不足 存储格式 使用场景 1) 定义接口 2) 序列化 3) 生成 Token 4) 配置文件 JSON语法规则 JSON 与 JavaScript 对象的区别 JSON数…

小浪助手:下载学浪视频的最佳助手

小浪助手我已经打包好了,有需要的自己下载一下 学浪下载器链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好我给大家准备好的压缩包 2.打开小浪助手.exe 3.选择一种登录方式&#xff0c;扫码登录或者手机号…

python实现的基于单向循环链表插入排序

相比于定义一个循环双向链表来实现插入排序来说&#xff0c;下面的实现采用一个单向循环链表来实现&#xff0c;并且不需要定义一个单向循环链表类&#xff0c;而是把一个list&#xff08;数组/顺序表&#xff09;当成单向循环链表来用&#xff0c;list的元素是一个包含两个元素…

监控操作台为生活提供安全保障

在科技日新月异的现代社会&#xff0c;监控操作台已成为我们生活中不能缺少的一部分。它犹如一座城市的守护神&#xff0c;默默无闻地守护着我们的安全&#xff0c;确保着每一刻的平安。今天&#xff0c;和北京嘉德立一同走进这个神秘的世界&#xff0c;揭开监控操作台的神秘面…

知识产权 | 守护科技创新之光,共筑知识产权长城

2024年4月26日&#xff0c;迎来了一年一度的世界知识产权日&#xff0c;今年的主题是&#xff1a;“立足创新创造&#xff0c;构建共同未来。” 易我科技是一家专注于数据安全产品研发、生产、销售、服务一体化的高新技术软件企业。易我科技自成立以来&#xff0c;始终秉持尊重…

今日arXiv最热联邦学习论文:通信成本降低94%,中科院计算所发布个性化联邦学习方法

引言&#xff1a;你的隐私&#xff0c;联邦来守护&#xff01; 想象一下&#xff0c;未来你的手机就像一位贴心的私人助理&#xff0c;能够洞察你的喜好、日程&#xff0c;甚至预测你的情绪。听起来很棒&#xff0c;但你可能会担心隐私泄露的问题。别担心&#xff0c;最近一种…

macOS系统下载安装Apifox

官网链接&#xff1a;Apifox下载 点击苹果&#xff0c;再根据自己的芯片类型选择版本 确认芯片类型的方法 我的是apple芯片&#xff0c;下载完拖动安装包安装就可以了

SpringWebFlux RequestBody多出双引号问题——ProxyPin抓包揪出真凶

缘起 公司有个服务做埋点收集的&#xff0c;可以参考我之前的文章埋点日志最终解决方案&#xff0c;今天突然发现有些数据日志可以输出&#xff0c;但是没法入库。 多出的双引号 查看Flink日志发现了JSON解析失败&#xff0c;Flink是从Kafka拿数据&#xff0c;Kafka本身不处…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.11-1.12

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)1.11 神经网络的权重…

C++——STL容器——vector

vector是STL容器的一种&#xff0c;和我们在数据结构中所学的顺序表结构相似&#xff0c;其使用和属性可以仿照顺序表的形式。vector的本质是封装了一个动态大小的数组&#xff0c;支持动态管理容量、数据的顺序存储以及随机访问。 1.前言说明 vector作为容器&#xff0c;应该…

银行核心背后的落地工程体系丨Oracle - TiDB 数据迁移详解

本文作者&#xff1a; 张显华&#xff0c;孟凡辉&#xff0c;庄培培 系列导读&#xff1a;徐戟&#xff08;白鳝&#xff09;数据库技术专家&#xff0c;Oracle ACE&#xff0c;PostgreSQL ACE Director 当前&#xff0c;国内大量的关键行业的核心系统正在实现国产化替代&…

智能手机加速度计和陀螺仪进行心律不齐以及心衰的检测

期刊地址&#xff0c;希望那位大佬根据这个期刊进行创业 &#xff0c;拿到NMPA证书&#xff0c;造福中国人&#xff01;太简便了这个方案。https://www.jacc.org/doi/full/10.1016/j.jchf.2024.01.022https://www.jacc.org/doi/full/10.1016/j.jchf.2024.01.022 背景与目的&…

【STM32F407+CUBEMX+FreeRTOS+lwIP netconn UDP TCP记录】

STM32F407CUBEMXFreeRTOSlwIP netconn UDP TCP记录 注意UDPUDP1UDP2 TCPTCP clientTCP server图片 注意 1、超时 #include “lwipopts.h” #define LWIP_SO_RCVTIMEO 12、先保证能ping通 3、关于工程创建可参考 【STM32F407CUBEMXFreeRTOSlwIP之UDP记录】 4、…