【C++课程学习】:Data类的实现

news2024/12/23 3:33:10

🎁个人主页:我们的五年

🔍系列专栏:C++课程学习

🎉欢迎大家点赞👍评论📝收藏⭐文章

目录

 🍩1.头文件

🍩2.实现文件:

 🍩3.分析:

🍟3.1Data的构造函数和析构函数:

🍟3.2拷贝构造:


 前言:
类学的差不多的,我们就日期类来对前面类的学习做一个巩固,然后学习一下运算符重载。

 🍩1.头文件

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

class Data {
	friend ostream& operator<<(ostream& out, Data& d);
	friend istream& operator>>(istream& in, Data& d);
public:
	//全缺省的构造函数
	Data(int year = 1, int month = 1, int day = 1) {
		_year = year;
		_month = month;
		_day = day;
	}
	//拷贝构造函数
	Data(const Data& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	//运算符重载
	bool operator==(const Data& d);
	bool operator<(const Data& d);
	bool operator>(const Data& d);
	bool operator<=(const Data& d);
	bool operator>=(const Data& d);
	bool operator!=(const Data& d);
	Data& operator = (const Data& d);

	//日期+天数
	Data& operator+=(int day);
	Data operator+(int day);

	//日期-天数
	Data& operator-=(int day);
	Data operator-(int day);

	//日期的前置和后置++
	Data& operator++();
	Data operator++(int);

	//日期的前置和后置--
	Data& operator--();
	Data operator--(int);

	//日期减日期=相差的天数
	int operator-(const Data& d);

	//void operator<<(ostream& out);


	//内联函数,获取year年第month的天数
	int GetDay(int year, int month) {
		assert(month > 0 && month < 13);
		static int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
		//闰年的二月返回29
		if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
			return 29;
		return days[month];
	}
	void print() {
		cout << _year << "-" << _month << "-" << _day << endl;
	}

	int Getyear() {
		return _year;
	}
	int Getmonth() {
		return _month;
	}
	int Getday() {
		return _day;
	}
	//析构函数
	~Data() {
		_year = -1;
		_month = -1;
		_day = -1;
	}
private:
	int _year;
	int _month;
	int _day;
};

🍩2.实现文件:

#include"Data.h"
bool Data::operator==(const Data& d) {
	return _year == d._year
		&& _month == d._month
		&& _day == d._day;
}

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

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

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

Data& Data::operator = (const Data& d) {
	_year = d._year;
	_month = d._month;
	_day = d._day;
	return *this;
}

Data& Data::operator+=(int day) {
	if (day < 0)
	{
		return *this -= -day;
	}
	_day += day;
	while (_day > GetDay(_year,_month))
	{
		_day -= GetDay(_year, _month);
		_month++;
		if (_month == 13)
		{
			_month = 1;
			_year++;
		}
	}
	return *this;
}

Data Data::operator+(int day) {
	Data a = *this;
	a += day;
	return a;
}
Data& Data::operator-=(int day) {
	if (day < 0)
	{
		return *this += -day;
	}
	_day -= day;
	while (_day <= 0)
	{
		--_month;
		if (_month == 0)
		{
			_month = 12;
			--_year;
		}
		_day += GetDay(_year, _month);
	}
	return *this;
}

Data Data::operator-(int day) {
	Data a = *this;
	a -= day;
	return a;
}
Data& Data::operator++() {
	return *this += 1;
}

Data Data::operator++(int) {
	Data a = *this;
	*this += 1;
	return a;
}

Data& Data::operator--() {
	return *this -= 1;
}

Data Data::operator--(int) {
	Data tmp = *this;
	*this -= 1;
	return tmp;
}

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

ostream& operator<<(ostream& out,Data& d){
	out << d._year << "-" << d._month << "-" << d._day << endl;
	return out;
}

istream& operator>>(istream& in, Data& d) {
	in >> d._year >> d._month >> d._day;
	return in;
}

 🍩3.分析:

日期的基本成员就是年(year),月(month),和日(day)。

    int _year;
    int _month;
    int _day;

🍟3.1Data的构造函数和析构函数:

构造函数我们用了全缺省的构造函数:


构造函数:

如果没有传参数的,我们就初始化为1。其实换成year的缺省值换为1970,moth换成1,day换成1,也是可以的,时间戳从这时候开始计时。

   //全缺省的构造函数

Data(int year = 1, int month = 1, int day = 1) {
        _year = year;
        _month = month;
        _day = day;
    }


析构函数:

没有资源要进行清理,我们把类的属性都变为-1。

//析构函数

~Data() {
        _year = -1;
        _month = -1;
        _day = -1;
    }

🍟3.2拷贝构造:

  加上const修饰一下d,只读。

 //拷贝构造函数
    Data(const Data& d)
    {
        _year = d._year;
        _month = d._month;
        _day = d._day;
    }

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

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

相关文章

ARM32开发--PWM与通用定时器

知不足而奋进望远山而前行 目录 文章目录 前言 学习目标 学习内容 PWM pwm原理 需求 开发流程 初始化PWM PWM占空比控制 main函数修改duty 输出通道 关心的内容 重要的关键词 周期 分频 占空比 总结 前言 在微控制器开发中&#xff0c;理解和掌握PWM&#x…

计算机网络:网络层 - IPv4地址

计算机网络&#xff1a;网络层 - IPv4地址 分类编址划分子网子网掩码 无分类编址 CIDRCIDR 地址块构造超网 在酒店中&#xff0c;每个房间都有门牌号码&#xff0c;服务员送餐时&#xff0c;就可以根据门牌号码来判断一份餐要送到那个房间。 在网络中也是如此&#xff0c;一份…

泵制造5G智能工厂工业物联数字孪生可视化,推进制造业数字化转型

泵制造5G智能工厂工业物联数字孪生可视化&#xff0c;推进制造业数字化转型。泵制造行业&#xff0c;作为工业领域的核心部分&#xff0c;更是急需通过技术创新实现生产流程的智能化和高效化。而5G智能工厂工业物联数字孪生可视化技术的出现&#xff0c;为泵制造业的数字化转型…

【全网最齐报错的解决方法!】运行mvn命令打包项目jar包报错?“Fatal error compiling: 无效的目标发行版: 19 ”, 让我来看看~

最近写实验&#xff0c;要打包项目&#xff0c;但是不管是在cmd运行“mvn clean package -Dmaven.test.skiptrue”命令&#xff0c;还是在idea上去操作&#xff0c;都出现了这样的一个错误&#xff1a; [EROR] Failed to exeoute goal org.apache.maven.plugins:maven-comnpile…

作业6.11

练习1&#xff1a;输入一个数&#xff0c;判断是否是完美数 完美数&#xff1a;正序和逆序的结果一致 练习2&#xff1a; * ** *** **** for(int i0;i<4;i){for(int y1;y<4-i;y){ printf(" ");}for(int j0;j<i;j){printf("*&quo…

zabbix-agent如何版本回退降低?

文章目录 1&#xff0c;查看zabbix-agent版本号2&#xff0c;查看zabbix-server的版本号3&#xff0c;卸载已有的zabbix-agent4&#xff0c;找到与zabbix-server匹配版本的zabbix-agent5&#xff0c;安装zabbix-agent 5.0.42版本6&#xff0c;查看已安装的zabbix-agent的版本号…

谁是最会写作文的AI“考生”?“阅卷老师”ChatGPT直呼惊艳!

文章推荐 粽叶飘香&#xff0c;端午安康&#xff01;AI视频送祝福啦~ AI日报&#xff5c;文生语音大模型国内外均有突破&#xff0c;Pika完成6亿新融资&#xff0c;视频大模型也不远了&#xff01; ⭐️搜索“可信AI进展“关注公众号&#xff0c;获取当日最新AI资讯 一年一…

Visual Studio 调试 Win32 出现 Task Manager / Explorer 无法打开,无法关机/重启

现象 Access is denied 无法关机 无法通过开始 -> 关机/重启 进行关机或者重启 无法打开新的应用 无法通过开始 -> 双击应用打开新的应用 已打开应用的使用不受影响 已经打开的应用可以正常操作 原因 杀毒软件&#xff1b;关掉杀毒软件就好了 问题查找过程 参考…

记一次华为2288H V5更换主板的辛酸

1、开机提示找不到设备&#xff0c;通过带外检查硬盘raid是否正常&#xff0c;如果正常就不是硬件问题&#xff0c;也不会是线没接好 2、网络不通&#xff0c;服务重启啥的都正常不会报错&#xff0c;就是ping不通网关&#xff0c;后来通过带外发现是网卡漂移了。 核对mac地址发…

项目:双人五子棋对战-对战模块(6)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 当玩家进入到游戏房间后, 就要开始一局紧张而又刺激的五子棋对战了, 本文将就前端后端的落子与判断胜负的部分作详细讲解. 模块详细讲解 约定前后端交互的接口 首先是建立连接后, 服务器需要生成一些游戏的初始信息(可…

一五零、MAC 安装mysql可视化工具连接

mysql安装&#xff0c;按照网上教程一步步安装&#xff08;官网下载安装包->解压->完成安装&#xff09;&#xff0c;最后在「系统偏好设置」无法启动mysql。 原因&#xff1a;下载的版本是8.0最新版本&#xff0c;MAC上这种方法无法启动成功。 解决方法 换低版本的mys…

JDBC开发之四大核心API:DriverManager Connection Statement ResultSet

DriverManager 方法都是静态的 注册驱动 在Mysql5之后我们就不用注册驱动了 在jar包里已经写好了 读取文件 第二个方法 如果连接的是主机mysql并且端口是默认的3306 则可以简化书写 代码书写 import java.sql.Connection; import java.sql.DriverManager; import java.sql.S…

微软的这个按钮又双叒叕变了位置?有时候还不见了……

前言 小白最近打开Windows11系统的时间比较少&#xff0c;大部分时间都还是喜欢用MacBookPro码字。 之前小白写过一篇关于微软系统左下角的这个神奇按钮 Windows11更新之后&#xff0c;电脑左下角多出了一个奇怪的按钮&#xff08;点我跳转查看&#xff09; 没错&#xff0…

vivado HW_SIO_GT

描述 Xilinx的可定制LogiCORE™IP集成误码率测试仪&#xff08;IBERT&#xff09;核心 FPGA是为评估和监控千兆收发器&#xff08;GTs&#xff09;而设计的。IBERT core支持系统内串行I/O验证和调试&#xff0c;使您能够进行测量和优化 您的设计中的高速串行I/O链路。参考综合误…

webpack--压缩,代码的拆分,tree shinking

Terser 对代码进行压缩、丑化 const TerserPlugin require("terser-webpack-plugin");optimization: { minimize: true, //在开发环境下启用 CSS 优化minimizer: [new TerserPlugin({extractComments: false,terserOptions: {compress: {arguments: true,// 将函数…

CAPL如何发送一条SYN报文

在TCP协议中,发起连接的Client端首先会发送一条SYN报文,用来发起TCP连接请求。这条SYN报文的本质是TCP报文,只不过flags字段中SYN位置为1。 且SYN的序列号是随机的,所以可以用一个随机函数来生成随机数。而ack确认号是0。 TCP报文和UDP报文一样,需要设置源和目标端口号,…

最新小红薯引流无限曝光机,轻松高效精准曝光引流【引流软件+使用教程】

在现代数字营销的海洋中&#xff0c;精准引流已成为商家及创业者追求的圣杯。一种无需采集ID的新策略突破了传统营销的局限&#xff0c;提供了一条高效且安全的道路。这种方法旨在通过有针对性的关键词触达潜在的兴趣群体&#xff0c;实现品牌与用户之间的高效对接。 以关键词…

【CW32F030CxTx StartKit开发板】构建开发环境,测试LED和UART例程

目录 1、开发环境的构建 2、硬件连线 3. 例程测试 3.1 LED示例 3.2 UART printf示例 本文首发于21ic&#xff1a;https://bbs.21ic.com/forum.php?modviewthread&tid3382698&page1#pid14103102 感谢21ic和武汉芯源提供的测试机会。 此次测试的是CW32F030CxTx S…

新手grub 配置介绍

最近因为工作需要接触了grub&#xff0c;学到了一些相关知识&#xff0c;所以在这里写篇博客记录一下&#xff0c;有不对的部分欢迎指正。 目录 grub是什么&#xff1f; grub有哪些配置文件&#xff1f; 各配置文件区别 配置文件生成流程 配置文件有哪些内容&#xff1f;…

【Nature子刊】最争气国人友好“灌水刊”,中科院3区升2区,录用仅1个月,2天见刊!

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…