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…

在openEuler环境下快速编译GreatSQL RPM包

在上一篇中&#xff0c;已经介绍了在CentOS环境下编译GreatSQL RPM包的过程&#xff0c;本文再介绍如何在openEuler环境下编译GreatSQL RPM包。 运行环境是docker中的openEuler 22.03 x86_64&#xff1a; $ docker -v Docker version 20.10.10, build b485636$ docker run -itd…

纯毛纱线市场调研:预计2026年增长至近20亿美元

纯毛纱线是指纯天然的羊毛纤维制成的纱线&#xff0c;具有柔软、保暖等优良特性。随着人们对于环保、可持续发展和健康产品的重视&#xff0c;全球纯毛纱线市场呈现出稳步增长的趋势。全球市场分析&#xff1a; 根据市场研究公司发布的报告&#xff0c;全球纯毛纱线市场规模在2…

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…

ArrayList部分功能实现

public class MyArraylist {public int[] elem;public int usedSize 0;//0//默认容量private static final int DEFAULT_SIZE 10;public MyArraylist() {this.elem new int[DEFAULT_SIZE];}/*** 打印顺序表:* 根据usedSize判断即可*/public void display() {for (int i 0; …

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

一、透明管理是什么 透明管理专注工业数据可视化分析与呈现&#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;但是有的时候就是同步的。我调用的代码是现成…

mdbook 使用 Rust 创建书籍的 Markdown 工具

当我们使用 markdown 编写文档时&#xff0c;目前有 gitbook&#xff0c;typora &#xff0c;以及一些 vscode 插件提供的 markdown 编辑插件&#xff0c;推荐一个开源实用的由 rust 官方维护的 mdbook。 官方仓库&#xff1a;https://github.com/rust-lang/mdBook 使用向导&a…

基于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://…

2024年最热门的15个科技工作岗位

1.系统安全管理员 系统安全管理员的任务是确保公司的网络、数据和系统免受网络安全威胁&#xff0c;方法是确保有适当的安全战略并保持最新的合规性和策略。 要求&#xff1a;应聘者应具有网络安全职位的工作经验&#xff0c;并对合规性和安全协议的最佳实践有坚实的基础&a…

阅读技巧总结

1、英语阅读中Skimming和Scanning的区别 Skimming&#xff1a;略读&#xff0c;即&#xff1a;不追求句子的细节含义&#xff0c;只求了解句子和段落想表达什么&#xff0c;摸清楚文章的主旨大意&#xff0c;也就是老外常说的&#xff1a;Reading for gist(主旨) Scanning&am…