C++类与对象基础(5)——日期类的实现

       对于实现日期类中需要用到的例如:构造函数,析构函数,运算符重载等内容,已经在前面几篇文章中进行介绍,故本文只给出关于类和对象中日期类的代码实现,对于代码的原理不给予详细的解释:

1.头文件violent.h:

#pragma once#include<stdio.h>
#include<iostream>
#include<assert.h>
#include<stdbool.h>using std::cout;
using std::cin;
using std::endl;class Date
{
public://构造函数:函数名与类名相同,没有返回值,可以构成重载,自动调用//针对内置类型不做处理,针对自定义类型会自动调用其自己的构造函数Date(int year = 1, int month = 1, int day = 1);//拷贝构造函数,对于日期类可以不写//拷贝构造函数针对内置类型会完成值拷贝,针对自定义类型会自动调用其自己的拷贝构造函数//Date(Date& d1)//{//	_year = 2024;//	_month = 1;//	_day = 6;//}//类的比较运算函数bool operator==(Date& d);bool operator!=(Date& d);bool operator>(Date& d);bool operator>=(Date& d);bool operator<=(Date& d);bool operator<(Date& d);//获取年月份对应的日期int GetMonthDay(int _year, int _month);void Print();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-(Date& d);//析构函数,不是清除对象,而是对对象中的资源进行清理,作用方式与构造函数类似,针对内置类型不作用//针对自定义类型会调用自己的析构函数//函数名是类名之前加上波浪线,每个类中只能存在一个析构函数,类生命周期结束会自动调用,不能构成重载~Date();private:int _year;int _month;int _day;
};

2.函数功能实现文件violent.c:

#define _CRT_SECURE_NO_WARNINGS 1#include"violent.h"//构造函数
Date::Date(int year, int month, int day)
{if ((year < 1) || (month > 12) || (month < 1) || (day < 1)){cout << "日期信息非法" << endl;}_year = year;_month = month;_day = day;
}
//析构函数
Date:: ~Date()
{_year = 0;_month = 0;_day = 0;
}void Date::Print()
{cout << _year << " " << _month << " " << _day << endl;
}
bool Date::operator==(Date& d)
{return _year == d._year && _month == d._month && _day == d._day;
}bool Date::operator!=(Date& d)
{return !(*this == d);
}bool Date::operator>(Date& d)
{if (_year > d._year){return true;}else if ((_year == d._year) && (_month > d._month)){return true;}else if ((_year == d._year) && (_month == d._month) && (_day > d._day)){return true;}else{return false;}
}bool Date::operator>=(Date& d)
{return ((*this > d) || (*this == d));
}bool Date::operator<=(Date& d)
{return !(*this > d);
}bool Date::operator<(Date& d)
{return !(*this >= d);}int Date::GetMonthDay(const int _year,const int _month)
{int Day[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 Day[_month];
}//运算符重载:+=(会改变类)
Date& Date::operator+=(int day)
{_day = _day + day;while(_day > GetMonthDay(_year,_month)){_day = _day - GetMonthDay(_year, _month);_month++;if (_month > 12){_month = 0;_year++;}}return (*this);
}Date Date::operator+(int day)
{Date tmp(*this);tmp = tmp += day;return tmp;
}Date& Date::operator-=(int day)
{_day = _day - day;while (_day <= 0){_month--;if (_month == 0){_year--;_month = 12;}_day = _day + GetMonthDay(_year, _month);	}return (*this);
}Date Date::operator-(int day)
{Date tmp(*this);tmp = (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--()
{*this -= 1;return (*this);
}Date Date::operator--(int)
{Date tmp(*this);(*this) -= 1;return tmp;
}int Date::operator-(Date& d)
{int flag = 1;Date max = (*this);Date min = (d);if ((*this) < d){max = d;min = (*this);flag = -1;}int n = 0;while (min != max){min++;n++;}return n * flag;
}

3.功能测试文件Test.c:

#define _CRT_SECURE_NO_WARNINGS 1#include"violent.h"void Test1()
{Date d1(2024,1,6);d1.Print();Date d2(2024, 1, 6);d2.Print();Date d3(2024, 1, 15);cout << "测试结果校验: ==" << endl;bool ret =(d1==d2);cout << " ret = " << ret << endl;cout << "测试结果校验: != " << endl;bool ret1 = (d2 != d1);cout << " ret1 = " << ret1 << endl;cout << "测试结果校验:>" << endl;bool ret2 = (d3 > d1);cout << " ret3 =  " << ret2 << endl;cout << "测试结果校验: >=" << endl;bool ret3 = (d3 >= d1);bool ret4 = (d2 >= d1);cout << " ret3 = " << ret3 << endl << "ret4 = " << ret4 << endl;cout << "测试结果校验: <=" << endl;bool ret5 = (d1 <= d3);bool ret6 = (d2 <= d1);cout << " ret5 = " << ret5 << endl << " ret6 = " << ret6 << endl;cout << "测试结果校验: <" << endl;bool ret7 = (d2 < d3);cout << "ret7 = " << ret7 << endl;
}void Test2()
{cout << endl << " 下面内容为Test2中的测试" << endl;Date dd(2024, 1, 6);dd.Print();Date dd1(2024, 1, 6);cout << "测试+=" << endl;Date ret1 = (dd += 100);ret1.Print();cout << "测试+" << endl;Date ret2 = (dd1 + 100);ret2.Print();cout << "测试-=" << endl;Date ret3 = (dd -= 100);ret3.Print();cout << "测试-" << endl;Date ret4 = (dd1 - 100);ret4.Print();
}void Test3()
{cout << endl << " 下面内容为Test3中的测试" << endl;Date d3(2024, 1, 6);cout << " 测试++d" << endl;Date ret1 = (++d3);Date d4(2024, 1, 6);ret1.Print();cout << " 测试d++" << endl;Date ret2 = (d4++);ret2.Print();
}void Test4()
{cout << endl << " 下面内容为Test4中的测试" << endl;Date d(2024, 1, 6);Date d2(2024, 1, 6);cout << "测试--d" << endl;Date ret1 = (--d);ret1.Print();cout << "测试d--" << endl;Date ret2 = (d2--);ret2.Print();
}void Test5()
{Date d1(2024, 1, 6);Date d2(2024, 4, 15);int ret1 = d2 - d1;cout << ret1 << endl;
}
int main()
{Test1();Test2();Test3();	Test4();Test5();
}

4. 代码运行结果展示:

 

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

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

相关文章

kubectl常用命令(全局篇)

格式 -o [cmd] -o json|yaml|wide 如&#xff1a;输出json格式 kubectl get ns ingress-nginx -o json 获取基本信息get #查看集群基本信息 kubectl get cs|pods|nodes|ns|svc|rc|deployments kubectl get cs kubectl get pods kubectl get nodes kubectl get ns kubectl g…

Nginx 搭建可道云网盘

目录 1.安装php-fpm 2. 建站点根目录与配置 2.1 建站点根目录 2.2 配置 3. 搭建成功 1.安装php-fpm nginx 需要使用php 需要安装php-fpm yum install php-fpm php-mbstring php-mysqlnd php-gd -y 修改 www.conf 文件的配置29行和41行&#xff0c;将用户会让用户组改成n…

数据透明化是什么意思,什么是透明管理?

一、透明管理是什么 透明管理专注工业数据可视化分析与呈现&#xff0c;为企业提供一站式数据可视化分析解决方案。聚焦工业BI&#xff0c;基于工业管理特点&#xff0c;打造“指标监控-异常发现-根因溯源-举措拆解-效果监控”管理闭环&#xff0c;实现工业全层级的透明管理。…

SpringCloud-高级篇(十二)

在主从集群中slave节点发生了宕机&#xff0c;不用担心&#xff0c;只要它重启就能从master节点上完成数据的同步&#xff0c;恢复数据&#xff0c;如果宕机的不是slave而是master&#xff0c;是不是master重启就可以呢&#xff1f;如果你做了master节点的数据持久化&#xff0…

GPT火了一年了,你还不懂大语言模型吗?

本文主要介绍大语言的基本原理、以及应用场景和对未来的展望&#xff0c;侧重应用而非技术原理。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;漫谈LLMs带来的AIGC浪潮 &#x1f380;CSDN主页 发狂的小花 &#…

【Docker】容器的数据卷

目录 概念及作用 配置数据卷 数据共享 一个容器挂载多个数据卷 概念及作用 Docker容器的数据卷是一种特殊类型的目录&#xff0c;即使容器被删除&#xff0c;存在于宿主机上&#xff0c;可以供一个或多个容器使用。数据卷可以绕过联合文件系统&#xff0c;提供持续存储或共…

6547网文库动态 | 少儿编程考级真题、信息学奥赛、PPT课件等

近期动态&#xff1a;少儿编程题库网上传了2023年12月等级考试真题&#xff0c;主要有GESP真题、电子学会青少年软件编程等级考试真题&#xff0c;少儿编程文库系统主要上传了全国中小学信息技术创新与实践大赛&#xff08;NOC大赛&#xff09;真题&#xff0c;信息技术课件&am…

C++CLI——4数组、泛型、集合与属性

CCLI——4数组、泛型、集合与属性 C数组 在c中&#xff0c;数组的大小必须在编译时确定&#xff0c;并且将数组传递给函数时&#xff0c;传递的只是数组起始地址&#xff0c;所以要想办法连同数组大小一同传递给函数。 int arr[4] { 1,2,3,4 }; int arr1[] { 1,2,3,4 }; i…

CodeWave智能开发平台--03--目标:应用创建--07供应商数据表格01

摘要 本文是网易数帆CodeWave智能开发平台系列的第09篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成07供应商数据表格 CodeWave智能开发平台的09次接触 CodeWave参考资源 网易数帆CodeWave开发者…

相机同步遇到的小问题

出现问题 在进行两个相机显示的时候&#xff0c;出现了相机显示不同步的情况&#xff0c;具体情况如下视频所示&#xff1a; 华睿/大华相机左右相机显示不同步 可以见到视频之中&#xff0c;右相机是比左相机更快一点的&#xff0c;但是有的时候就是同步的。我调用的代码是现成…

基于YOLOv5全系列参数模型【n/s/m/l/x】开发构建道路交通场景下CCTSDB2021交通标识检测识别系统

交通标志检测是交通标志识别系统中的一项重要任务。与其他国家的交通标志相比&#xff0c;中国的交通标志有其独特的特点。卷积神经网络&#xff08;CNN&#xff09;在计算机视觉任务中取得了突破性进展&#xff0c;在交通标志分类方面取得了巨大的成功。CCTSDB 数据集是由长沙…

Centos7 静态连接失败解决

在 Linux 下有时候我们需要静态连接&#xff0c;但是静态连接会失败&#xff0c;失败的原因有几种&#xff1a; 1.没有相关的静态库文件 如果是没有相关的静态库文件&#xff0c;那么使用静态连接的话&#xff0c;就是下面的这种效果&#xff1a; 就是显示无法找到 .... 解…

搭建Github Page完全手册

一、前期准备 注册Github账号&#xff08;必备&#xff09;下载GitHub Desktop&#xff1a;下载链接&#xff08;可使用git代替&#xff09;模板选择网站&#xff1a; jekyllthemes.orggohugomademistakes 二、快速入门 1.模板参考 作者使用的模板来源&#xff1a;https://…

文件批量改名,快速去除文件名中的空格,告别命名烦恼!

在日常工作中&#xff0c;我们经常遇到文件名中带有空格的情况&#xff0c;这不仅导致文件难以查找&#xff0c;还可能在某些软件中引发问题。那么&#xff0c;如何快速、有效地去除这些空格呢&#xff1f;今天&#xff0c;我就来教你一招&#xff01; 首先&#xff0c;我们要进…

【IEEE会议征稿通知】第五届计算机视觉、图像与深度学习国际学术会议(CVIDL 2024)

第五届计算机视觉、图像与深度学习国际学术会议&#xff08;CVIDL 2024&#xff09; 2024 5th International Conference on Computer Vision, Image and Deep Learning 第五届计算机视觉、图像与深度学习国际学术会议&#xff08;CVIDL 2024&#xff09;定于2024年4月19-21日…

LeetCode刷题---两数之和

解题思路&#xff1a; 该题使用哈希表的思想解决该问题 首先定义一个Map&#xff0c;key为数组中的每个元素&#xff0c;value为每个元素的索引下标。接着遍历原数组&#xff0c;对每一个元素进行判断&#xff0c;如果哈希表中包含target-nums[i]&#xff0c;则将其value和当前…

【JAVA GUI+MYSQL]社团信息管理系统

本社团信息管理系统主要实现登录注册、管理员信息管理、社团用户信息管理、用户申请信息管理功能模块。 目录 &#xff11;&#xff0e;系统主要功能介绍 &#xff12;&#xff0e; 数据库概念模型设计 3.具体功能模块的实现 3.1模型类 3.1.1Student.java 3.1.2User .j…

基于ssm的孩童收养信息管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本孩童收养信息管理就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

react-native下载图片到本地相册

需求 点击右上角下载icon&#xff0c;可以将当前图片下载并保存到本地相册。 下载的图片&#xff1a; 流程 下载图片的本质其实是&#xff0c; 固定需要下载的页面内容和样式 》将其放在当前页面不可见区域 》点击下载按钮 》穿一个ref给native&#xff0c;会自动拉起手机系…