【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.mzph.cn/pingmian/27309.shtml

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

相关文章

GroupJoin算子的实现

PolarIMC 发的一篇挺好的文章&#xff0c;值得阅读。写作很认真&#xff1a; https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/implementation-of-groupjoin

算法训练营第五十九天 | LeetCode 115 不同的子序列、LeetCode 583 两个字符串的删除操作、LeetCode 72 编辑距离

LeetCode 115 不同的子序列 这题和编辑距离比较像&#xff0c;也就是今天的第三题。 这题用动规解决的是多对一的分支子问题推导出当前问题的思路。 同样递推公式由两个字符串平齐&#xff0c;如果当前字符相等&#xff0c;则当前问题可由第一个字符串0~i-1和0~j-1匹配数及0~…

【硬件模块】SSD1306 OLED屏幕(含GD32ESP32驱动代码)

OLED屏幕 最近在写GD32的文章&#xff0c;之前STM32有OLED屏幕来展示数据&#xff0c;ESP32可以直接打印到电脑屏幕上&#xff0c;GD32的话手上就没有办法了。 虽然是可以直接把STM32的OLED屏幕的驱动代码改改移植到GD32上面&#xff0c;不过想了想干脆写一个文章来说说如何驱…

2024牛客网高频精选Java面试八股文整理(附答案)

Java 面试 Java 作为编程语言中的 NO.1,选择入行做 IT 做编程开发的人&#xff0c;基本都把它作为首选语言,进大厂拿高薪也是大多数小伙伴们的梦想。以前 Java 岗位人才的空缺&#xff0c;而需求量又大&#xff0c;所以这种人才供不应求的现状&#xff0c;就是 Java 工程师的薪…

特别名词Test Paper7

特别名词Test Paper7 potteries 陶器power 权力&#xff1b;能源powerpoint 投影的文件precaution 预防precision 精密度preference 偏爱preposition 介词prescription 药方presentation 演讲&#xff1b;陈述preservation 保存president 总统&#xff1b;校长&#xff08;大学…

公用nacos,实现只调用本机相应服务,不出现负载均衡到别人机器上

当我们有两个研发同时在调试一个微服务模块时&#xff0c;你和对方本地都会启动服务&#xff0c;这就导致在nacos会同时注册两个实例。默认情况下请求这个服务&#xff0c;具体处理请求的程序会在你和对方之间来回轮询&#xff0c;即一下你的服务一下对方的服务。 其结果就导…

栈(Stack)汇总

栈简介 栈&#xff08;Stack&#xff09;是只允许在一端进行插入或者删除操作的线性表。它的操作特性可以概括为——后进先出&#xff08;Last In First Out&#xff0c;LIFO&#xff09;。栈顶&#xff08;Top&#xff09;——线性表允许进行插入删除的一端&#xff1b; 栈底…

全面解析AdaBoost:多分类、逻辑回归与混合分类器的实现

1. 使用 AdaBoost 完成多分类和逻辑回归问题 多分类 AdaBoost 原本是为二分类问题设计的&#xff0c;但可以扩展到多分类问题。常用的方法包括 One-vs-All (OVA), AdaBoost.MH (Multiclass, Multi-Label) 和 AdaBoost.MR (Multiclass Ranking)。下面对每种方法进行详细介绍。…

PEPPERL+FUCHS倍加福模块R4D0-FB-IA10.1

PEPPERLFUCHS倍加福模块R4D0-FB-IA10.1 FA产品分类 1. 接近传感器类产品 - 电感式传感器 - 电容式传感器 - 磁式传感器 - 超声波传感器 - WCS位置编码系统 2. 光电传感器类产品 - 标准光电传感器 - 安全光电传感器 - 门控光电传感器 3. 编码器类产品 - 绝对值编码器 - 增量型编…

【Linux】基础IO——文件描述符,重定向

话接上篇&#xff1a; 1.文件描述符fd 磁盘文件 VS 内存文件&#xff1f; 当文件存储在磁盘当中时&#xff0c;我们将其称之为磁盘文件&#xff0c;而当磁盘文件被加载到内存当中后&#xff0c;我们将加载到内存当中的文件称之为内存文件。磁盘文件和内存文件之间的关系就像程…

红队内网攻防渗透:内网渗透之Linux内网权限提升技术:udf提权Capability权限LD_PRELOAD环境变量

红队内网攻防渗透 1. 内网权限提升技术1.1 Linux系统提权-Web&用户-数据库udf提权1.1.1 信息收集1.1.2 Web权限获取1.1.3 MYSQL-UDF提权1.1.4 下载到目标上1.1.5 连接确认是否有条件进行导出调用1.1.6 开始进行写入导出调用1.2 Linux系统提权-Web&用户-Capability能力1…

ThinkBook 16 2024 Ubuntu 触控板问题解决

sudo insmod goodix-gt7868q.ko sudo cp local-overrides.quirks /etc/libinput/local-overrides.quirks sudo systemctl restart gdm 有偿解决&#xff0c;无效退款 联系前&#xff0c;请写明笔记本型号和ubuntu版本

生命在于学习——Python人工智能原理(3.3)

三、深度学习 4、激活函数 激活函数的主要作用是对神经元获得的输入进行非线性变换&#xff0c;以此反映神经元的非线性特性。常见的激活函数有线性激活函数、符号激活函数、Sigmod激活函数、双曲正切激活函数、高斯激活函数、ReLU激活函数。 &#xff08;1&#xff09;线性…

【elementui源码解析】如何实现自动渲染md文档-第二篇

目录 1.概要 2.引用文件 1&#xff09;components.json 2&#xff09;json-template/string 3&#xff09;os.EOL 3.变量定义 4.模版填充 5.MAIN_TEMPLATE填充 6.src下的index.js文件 1&#xff09;install 2&#xff09;export 7.总结 1.概要 今天看第二个命令no…

无理数的渊源

无理数-西方欧美数学史上的第1次危机 第一次数学危机是数学史上的一次重要事件&#xff0c;发生于公元前400年左右的古希腊时期。这次危机的出现冲击了一直以来在西方数学界占据主导地位的毕达哥拉斯学派&#xff0c;同时标志着西方世界关于无理数的研究的开始。 古希腊的毕达…

还在用nginx,这款网关更强大

OpenResty与Nginx在功能和性能上有着密切的关联&#xff0c;但也存在一些关键的区别。以下是OpenResty与Nginx在不同方面的具体比较&#xff1a; 1. **技术架构** - **OpenResty**&#xff1a;OpenResty基于Nginx核心&#xff0c;集成了LuaJIT VM&#xff0c;允许直接在Nginx中…

整理好了!2024年最常见 20 道并发编程面试题(五)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常见 20 道并发编程面试题&#xff08;四&#xff09;-CSDN博客 九、请解释什么是线程安全以及如何实现线程安全。 线程安全是一个重要的概念&#xff0c;特别是在多线程编程中。当多个线程访问共享数据时&#xff0c;如果…

videoJS 视频 + 独一无二皮肤 + mp4/m3u8

推荐和参考文章&#xff1a; video.js调用-腾讯云开发者社区-腾讯云> 一、总结&#xff08;点击显示或隐藏总结内容&#xff09;一句话总结&#xff1a;网上有各种细致的现成的代码可以拿来用&#xff0c;没必要自己死专1、video.js有两种初始化方式&#xff1f;一种是在v…

c++ 函数内对象的释放

void someFunction() {MyClass obj MyClass(); }void someFunction() {MyClass obj new MyClass();}void someFunction() {MyClass* obj new MyClass(); }void someFunction() {std::unique_ptr<MyClass> obj std::make_unique<MyClass>(); }在函数中用这4种…

C++并发之条件变量(std::condition_variable)

目录 1 概述2 使用实例3 接口使用3.1 wait3.2 wait_for3.3 wait_until3.4 notify_one3.5 notiry_all3.5 notify_all_at_thread_exit1 概述 条件变量是一个能够阻塞调用线程直到被通知恢复的对象。   当调用其中一个等待函数时,它使用unique_lock(通过互斥锁)来锁定线程。线程…