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

🎁个人主页:我们的五年

🔍系列专栏: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 };//闰年的二月返回29if (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.rhkb.cn/news/346956.html

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

相关文章

Java高阶数据结构-----并查集(详解)

目录 &#x1f9d0;一.并查集的基本概念&实例&#xff1a; &#x1f92a;二.并查集代码&#xff1a; &#x1f602;三&#xff1a;并查集的一些习题&#xff1a; A.省份数量 B.等式方程的可满足性 &#x1f9d0;一.并查集的基本概念&实例&#xff1a; 并查集概念&…

16. 《C语言》——【牛客网BC124 —— BC130题目讲解】

亲爱的读者&#xff0c;大家好&#xff01;我是一名正在学习编程的高校生。在这个博客里&#xff0c;我将和大家一起探讨编程技巧、分享实用工具&#xff0c;并交流学习心得。希望通过我的博客&#xff0c;你能学到有用的知识&#xff0c;提高自己的技能&#xff0c;成为一名优…

46【Aseprite 作图】发光

1 通过“编辑 - 特效 - 卷积矩阵”&#xff0c;这次选择“7*7”&#xff0c;可以做出窗户的效果

【CS.SE】2024年,你应该选择计算机专业吗?详细分析与未来展望

文章目录 1. 引言1.1 背景介绍 2. 计算机相关专业的现状与挑战2. 计算机相关专业的现状与挑战2.1 行业内的就业趋势2.1.1 现有就业数据2.1.2 行业需求变化 2.2 市场饱和度与竞争2.2.1 毕业生数量增长2.2.2 薪资与职业发展 2.3 技术创新与行业发展2.3.1 新兴技术的发展2.3.2 全球…

惊艳的短视频:成都科成博通文化传媒公司

惊艳的短视频&#xff1a;瞬间之美&#xff0c;震撼心灵 在数字化时代&#xff0c;短视频以其短小精悍、内容丰富的特点&#xff0c;迅速占领了我们的屏幕和时间。而在这个浩如烟海的视频海洋中&#xff0c;总有一些短视频能够脱颖而出&#xff0c;以其惊艳的视觉效果、深刻的…

2024年,计算机相关专业还值得选择吗? 又该如何判断自己是否适合这类专业呢?

文章目录 一、2024年,计算机相关专业还值得选择吗?二、判断自己是否适合这类专业呢&#xff1f;三、哪所大学的计算机专业最好&#xff1f;四、计算机专业是否仍具有长远的发展潜力和就业前景呢? 一、2024年,计算机相关专业还值得选择吗? 在2024年选择大学专业时&#xff0…

视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案

随着新能源汽车的广泛使用&#xff0c;公众对充电设施的安全性和可靠性日益重视。为了提高充电桩的安全管理和站点运营效率&#xff0c;LntonCVS公司推出了一套全面的新能源汽车充电桩视频监控与管理解决方案。 该方案通过安装高分辨率摄像头&#xff0c;对充电桩及其周边区域进…

银河麒麟操作系统通过首批软件供应链安全能力认证

麒麟软件产品供应链安全能力获双重肯定&#xff01;5月30日&#xff0c;经北京赛迪认证中心评估&#xff0c;银河麒麟高级服务器操作系统V10和银河麒麟桌面操作系统V10成为首批获得软件供应链安全能力认证产品&#xff0c;并在操作系统类产品中名列前茅。 软件供应链安全能力评…

Navicat for MySQL 11软件下载及安装教程

软件简介&#xff1a; Navicat for SQL Server 是一套专为 SQL Server设计的全面的图形化数据库管理及开发工具&#xff0c;可进行创建、编辑和删除全部数据库对象&#xff0c;例如表、视图、函数、索引和触发器&#xff0c;或运行 SQL查询和脚本&#xff0c;查看或编辑 BLOBs…

观察 jvm 运行时数据区内存大小(native memory tracking)

jvm 运行时数据区 jvm 运行时数据区包括且不限于以下几个部分: 堆(heap): 用于存储对象实例和数组。堆内存的分配和释放由垃圾回收器进行管理。方法区(method area): 用于存储类的信息、静态变量、常量等。jdk 8 后方法区位于 metaspace。虚拟机栈(vm stack): 用于存储方法的…

汇聚荣科技有限公司实力如何?

汇聚荣科技有限公司实力如何?在科技日新月异的今天&#xff0c;一个公司的实力往往体现在其技术创新能力、市场占有率、团队专业度、客户满意度以及财务健康状况等多个维度。针对“汇聚荣科技有限公司”这一话题&#xff0c;我们将从这五个方面进行深入探讨。 一、技术创新能力…

Android Studio gradle下载失败

Android Studio下载Gradle插件总是出现网络超时问题。 解决办法&#xff1a; 替换为国内版本的镜像。 推荐使用国内腾讯的镜像&#xff1a; Index of /gradle/ 例如&#xff1a;gradle-8.0镜像&#xff1a; https://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip…

实验六、IPv4 地址的子网划分,第 2 部分《计算机网络》

你有没有发现&#xff0c;困的时候真的清醒不了。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 完成本练习之后&#xff0c;您应该能够确定给定 IP 地址和子网掩码的子网信息。 知道 IP 地址、网络掩码和子网掩码后&#xff0c;您应该能够确定有关该 IP 地…

Python报表需求处理示例

单一文件下&#xff0c;相关主题的共128张字段结构相似的表&#xff0c;对一种需求用Excel手工编辑相当麻烦&#xff0c;下面介绍一种python做自动化报表示例及代码流程。 每张表均有相同的字段结构&#xff0c;因此可对该文件下所有表格同时操作&#xff0c;大大提高了计算效率…

ARM32开发--PWM通道输出

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 内容 需求 通用定时器多通道 开发流程 多通道配置 占空比更新 完整代码 高级定时器通道输出 开发流程 通道配置 Break配置 完整代码 总结 前言 加强掌握…

2024年,计算机相关专业还值得选择吗?

2024年计算机相关专业依然非常值得选择&#xff0c;根据现有信息&#xff0c;计算机科学与技术、软件工程、信息安全、人工智能等专业在就业市场上保持着高度的热度和良好的前景。 就业率高&#xff1a;计算机专业毕业生的就业率持续保持高位&#xff0c;特别是在软件开发、系…

文案策划无门槛?文案策划职位入门全攻略

对于刚毕业的大学生来说&#xff0c;文案策划可以说是门槛最低的工作&#xff0c;仅次于前台。 绝大部分文案在进入广告公司之前不知道文案是干什么工作&#xff0c;早期会写点高考作文都不让写的诗歌就能入行。 没有文案专业&#xff0c;没有文案科班&#xff0c;最接近的三…

2024年山西水处理技术设备展览会11月8日召开

2024中国&#xff08;山西&#xff09;国际水务科技博览会 暨水处理技术设备与泵管阀展览会 时间&#xff1a;2024年11月8-10日 地点&#xff1a;山西潇河国际会展中心 推动城镇水务工作高质量发展&#xff0c;围绕解决水生态、水安全、水体黑臭、内涝积水等人民群众最关…

vivado HW_SIO_GT

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

[2024-06]-[大模型]-[Ollama] 0-相关命令

常用的ollama命令[持续更新中] ollama更新&#xff1a; curl https://ollama.ai/install.sh |sh带着flash attention启动&#xff1a; OLLAMA_FLASH_ATTENTION1 ollama serve停止ollama服务&#xff1a; sudo systemctl stop ollama note&#xff1a;目前遇到sudo systemctl …