当前位置: 首页 > news >正文

单页网站制作程序/广东省最新疫情

单页网站制作程序,广东省最新疫情,国际站wap端流量,wordpress批量获取七牛外链一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有: 1.日期类的构造函数 2.日期类的拷贝构造函数(在头文件中实现) 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…

一、目标

        通过前面对类和对象的介绍我们可以自己通过C++代码初步实现一个简单的日期类。

实现的主要操作有:

1.日期类的构造函数

2.日期类的拷贝构造函数(在头文件中实现)

3.日期类的比较运算符重载

4.日期类的计算运算符重载

5.流插入运算符重载。

二、总体思路

        首先,我这里采用的是分文件编程的方式来实现的日期类。

分别为:

1.头文件:Date.h

        该文件的主要目的是对上述目标所要实现的所有操作进行函数的声明。同时,还要包含在

源文件Date.cpp 中定义时所需要用到的头文件函数。

2.源文件:Date.cpp

        该文件的目的主要是用于对 头文件Date.h 所声明的所有函数进行定义,从而完成各个函数所要实现的操作。

3.源文件:Test.cpp

        该文件的目的主要是用于检测 源文件Date.cpp 中定义的函数是否能正常够使用并且达到所要实现的操作。

三、代码实现及具体思路

1.头文件:Date.h

        通过上面思路的介绍,我们可以知道,我们的目的是创建一个日期类,然后在日期类中自我声明:日期类的构造函数、日期类的比较运算符重载、日期类的计算运算符重载以及流插入运算符重载。并实现拷贝构造函数。

注意:通过我们前面对类和对象的介绍可知,因为在实现日期类过程中,我们没有动态申请空间,所以我们只需使用编译器默认生成的析构函数就可以,因此,我们不需要自己再定义一个析构函数)

代码如下:

#pragma once#include <iostream>
#include <assert.h>using namespace std;
class Date
{public:Date(int year = 1, int month = 1, int day = 1);void Print()const{cout << _year << '-' << _month << '-' << _day << endl;}Date(const Date& d){_year = d._year;_month = d._month;_day = d._day;}//日期类的比较运算符的重载bool operator<(const Date& x) const;bool operator==(const Date& x) const;bool operator<=(const Date& x) const;bool operator>(const Date& x) const;bool operator>=(const Date& x) const;bool operator!=(const Date& x) const;//日期类的计算运算符的重载int Get_MonthDay(int year,int month);		//获取该月份的天数Date& operator+=(int day);Date operator+(int day)const;Date& operator-=(int day);Date operator-(int day)const;Date& operator++();		//前置++Date operator++(int);		//后置++Date& operator--();			//前置--Date operator--(int);		//后置--int operator-(const Date& x) const;// 流插入不能写成成员函数?// 因为Date对象默认占用第一个参数,就是做了左操作数// 写出来就一定是下面这样子,不符合使用习惯//d1 << cout; // d1.operator<<(cout); //void operator<<(ostream& out);// 友元函数声明friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d);
private:int _year;int _month;int _day;
};ostream& operator<<(ostream& out, const Date& x);
istream& operator>>(istream& in, Date& x);

2.源文件:Date.cpp

        对于实现下面函数,我们需要首先定义一个获取当前月份天数的函数

代码实现:

//因为平年闰年的2月天数不一样所以我们需定义一个获取月份的函数来解决这一问题
int Date::Get_MonthDay(int year, int month)		//获取该月份的天数
{static int daysArr[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;}else{return daysArr[month];}
}

1.日期类的构造函数

 思路:

        我们在通过日期类构造函数初始化所定义的日期时,我们需要判断我们所定义的日期是否合法,若不合法,则需要返回并提示

代码实现:

Date::Date(int year, int month, int day)
{//判断所初始化的日期是否合法if (month > 0 && month < 13&&day>=1&&day<= Get_MonthDay(year, month)){_year = year;_month = month;_day = day;}else{cout << "非法日期" << endl;assert(false);}
}

2.日期类的比较运算符重载

思路:

        对于比较类的运算符重载来说,因为比较运算符具有互斥性,所以我们只需定义出 < 运算符重载和 == 运算符重载,然后其他运算符复用上面所定定义的两个运算符即可。并且在比较的同时,我们不会改变参数的值,所以我们可以在函数尾部加const用于修饰内部的this指针,这样的话,const修饰的类型我们也可以通过比较运算符来比较。

代码实现:

bool Date::operator<(const Date& x) const
{if (_year < x._year){return true;}else if (_year == x._year && _month < x._month){return true;}else if (_year == x._year && _month == x._month && _day < x._day){return true;}else{return false;}
}bool Date::operator==(const Date& x) const
{if (_year == x._year && _month == x._month && _day == x._day){return true;}else{return false;}
}bool Date::operator<=(const Date& x) const
{//复用上面定义的重载运算符:< , ==return *this < x || *this == x;
}bool Date::operator>(const Date& x) const
{//复用上面定义的重载运算符:<=return !(*this <= x);
}bool Date::operator>=(const Date& x) const
{//复用上面定义的重载运算符:> , ==return *this > x || *this == x;
}bool Date::operator!=(const Date& x) const
{//复用上面定义的重载运算符:==return !(*this == x);
}

3.日期类的计算运算符重载

思路:

        对于日期类的计算运算符重载的定义,我们可以先定义 += 运算符重载和 -= 运算符重载,然后其他运算符重载的定义我们可以复用这两个运算符重载,从而实现各个运算符所要实现的目的。

代码实现:

Date& Date::operator+=(int day)
{if (day < 0){return *this -= (-day);}_day = _day + day;while (_day > Get_MonthDay(_year, _month)){_day = _day-Get_MonthDay(_year, _month);++_month;if (_month == 13){_month = 1;++_year;}}return *this;
}Date Date::operator+(int day)const
{if (day < 0){return *this - (-day);}//复用上面定义的重载运算符:+=Date tem(*this);tem+= day;return tem;
}Date& Date::operator-=(int day)
{if (day < 0){return *this += (-day);}_day = _day - day;while (_day < 1){--_month;if (_month <1 ){_month = 12;--_year;}_day = _day + Get_MonthDay(_year, _month);}return *this;
}Date Date::operator-(int day)const
{if (day < 0){return *this + (-day);}//复用上面定义的重载运算符:-=Date tem(*this);tem -= day;return tem;
}Date& Date::operator++()
{//复用上面定义的重载运算符:+=*this += 1;return *this;
}Date Date::operator++(int)
{//复用上面定义的重载运算符:+Date tem = *this;*this += 1;return tem;
}Date& Date::operator--()
{//复用上面定义的重载运算符:+=*this -= 1;return *this;
}Date Date::operator--(int)
{//复用上面定义的重载运算符:+Date tem = *this;*this -= 1;return tem;
}

        实现两个日期之间相减求天数时,我们可以先判断哪个日期大,从而确定出所求的天数是正数还是负数,即用flage的正负来实现。接着我们定义一个n来统计天数,然后我们通过while循环,++最小的日期,并且++天数直到最小日期和最大日期相等的时候结束,这时候我们返回n*flage的值即是所求天数。

int Date::operator-(const Date& x) const
{Date max = *this;Date min = x;int flage = 1;if (*this < x){max = x;min = *this;flage = -1;}int n = 0;while (min != max){++min;++n;}return n * flage;
}

4.流插入运算符重载。

思路:

        对于日期类使用系统中的流插入(只能插入内置类型)时并不能实现所期望的操作,因为日期类是自定义类型,所以我们就需要自己定义一个流插入来实现这个操作

	// 流插入不能写成成员函数?// 因为Date对象默认占用第一个参数,就是做了左操作数// 写出来就一定是下面这样子,不符合使用习惯//d1 << cout; // d1.operator<<(cout); //void operator<<(ostream& out);

因此,这里我们通过友元函数,在全局中定义流插入的运算符重载

代码实现:

ostream& operator<<(ostream& out, const Date& x)
{out << x._year << "年" << x._month << "月" << x._day << "日" << endl;return out;
}istream& operator>>(istream& in, Date& x)
{int year, month, day;in >> year >> month >> day;if (month > 0 && month < 13&& day > 0 && day <= x.Get_MonthDay(year, month)){x._year = year;x._month = month;x._day = day;}else{cout << "非法日期" << endl;assert(false);}return in;
}

3.源文件:Test.cpp

Test1:

用于检测日期类的比较运算符的重载

void Test1()		//用于检测日期类的比较运算符的重载
{Date s1(2005, 2, 16);Date s2(2024, 8, 12);cout << "bool operator<(const Date& x) const:" << (s1 < s2) << endl;cout << "bool operator==(const Date& x) const:" << (s1 == s2) << endl;cout << "bool operator<=(const Date& x) const:" << (s1 <= s2) << endl;cout << "bool operator>(const Date& x) const:" << (s1 > s2) << endl;cout << "bool operator>=(const Date& x) const:" << (s1 >= s2) << endl;cout << "bool operator!=(const Date& x) const:" << (s1 != s2) << endl;
}

Test2:

用于检测日期类的计算运算符的重载:+= , +

void Test2()		//用于检测日期类的计算运算符的重载:+= , +
{Date s1(2005, 2, 16);s1.Print();s1 += 10000;s1.Print();Date s2(2005, 2, 16);s2.Print();Date s3=s2+10000;s3.Print();
}

Test3:

用于检测日期类的计算运算符的重载:-= , -

void Test3()		//用于检测日期类的计算运算符的重载:-= , -
{Date s1(2005, 2, 16);s1.Print();s1 -= 1000;s1.Print();Date s2(2005, 2, 16);s2.Print();Date s3 = s2 - 1000;s3.Print();
}

Test4:

用于检测日期类的计算运算符的重载:--

void Test4()		//用于检测日期类的计算运算符的重载:--
{Date s2(2005, 2, 16);Date s3(2005, 2, 16);Date s4;s4=s2--;s4.Print();s4 = --s3;s4.Print();
}

Test5:

用于检测日期类的计算运算符的重载:++

void Test5()		//用于检测日期类的计算运算符的重载:++
{Date s2(2005, 2, 16);Date s3(2005, 2, 16);Date s4;s4 = s2++;s4.Print();s4 = ++s3;s4.Print();
}

Test6:

用于检测日期类之间的计算运算符的重载:-

void Test6()		//用于检测日期类之间的计算运算符的重载:-
{Date s1(2005, 2, 16);Date s2(2024, 8, 13);cout << "int operator-(const Date& x) const:" << (s1 - s2) << endl;
}

Test7:

用于检测日期类之间的计算运算符的重载:<< , >>

void Test7()		//用于检测日期类之间的计算运算符的重载:<< , >>
{Date s1;cin >> s1;cout << s1 << endl;cout << s1 + 100 << endl;
}

四、结语:

         上述内容,即是我个人对C++日期类的个人见解及代码实现。若有大佬发现哪里有问题可以私信或评论指教一下。非常感谢各位uu们的点赞,关注,收藏,还望各位多多关照,让我们一起进步吧!

相关文章:

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有&#xff1a; 1.日期类的构造函数 2.日期类的拷贝构造函数&#xff08;在头文件中实现&#xff09; 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…...

【问题记录+总结】VS Code Tex Live 2024 Latex Workshop Springer模板----更新ing

目录 Summary 道阻且长 少即是多 兵马未动粮草先行 没有万能 和一劳永逸 具体问题具体分析 心态 Detail 1、关于模板[官网] 2、settings.json 3、虫和杀虫剂 4、擦 换成Tex Studio都好了。。。 Summary 道阻且长 某中意期刊&#xff0c;只有Latex。之前只简单用过…...

Linux运维_Bash脚本_源码安装Go-1.21.11

Linux运维_Bash脚本_源码安装Go-1.21.11 Bash (Bourne Again Shell) 是一个解释器&#xff0c;负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件&#xff0c;并于 1989 年发布的免费软件&#xff0c;作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux 和…...

ShareSDK Twitter

创建应用 1.登录Twitter控制台并通过认证 2.点击Developer Portal进入Twitter后台 3.点击Sign up for Free Account创建应用 4.配置应用信息 以下为创建过程示例&#xff0c;图中信息仅为示例&#xff0c;创建时请按照真实信息填写&#xff0c;否则无法正常使用。 权限申请…...

word2vec 如何用多个词表示一个句子

word2vec 模型通常用于将单词映射为固定大小的向量。为了使用多个词表示一个句子&#xff0c;我们可以采用以下几种方法&#xff1a; 词袋模型 (Bag of Words, BoW): 将句子中所有词的向量加起来&#xff0c;不考虑词的顺序。这种方法简单&#xff0c;但会丢失词序信息。 计算…...

IDEA中查看接口的所有实现类和具体实现类

1.IDEA中接口的所有实现类查看 1.CTRLH(hierarchy 结构) 我们选中要查看的接口 按住快捷键ctrlh 在界面右侧可以看到该接口的所有可能实现类 2.右击diagrams->show diagram 选中要查看的接口 右击选择diagrams->show diagram 即可以以图表的方式查看接口和所有实现类…...

DLL的导出和调用

动态链接库在C中非常重要&#xff0c;写了一个简单的例子用于DLL的导出和调用。 DLL的生成 头文件 #include<iostream> #include<stdexcept> using namespace std;#define TESTAPI __declspec(dllexport)// 函数定义 extern "C" {TESTAPI int add(in…...

vscode中调试cuda kernel

关于vscode中调试cpp可参考之前的博客&#xff1a;ubuntu vscode 基本设置 和 调试设置_ubuntu vscode 调试-CSDN博客 这篇我们来讲如何调试.cu的kernel&#xff0c;主要参考的是&#xff1a;https://www.zhihu.com/question/431782036/answer/2468791220 1、基本准备不多说&am…...

SQL的连接查询与pandas的对应关系

在SQL和Pandas中&#xff0c;连接查询&#xff08;join&#xff09;是处理数据集之间关系的重要工具。下面是SQL中的各种连接查询类型及其与Pandas中相应操作的对应关系&#xff1a; 1. INNER JOIN SQL: INNER JOIN 返回两个表中具有匹配值的行。 Pandas: merge() 方法的 how…...

【JS】中断和恢复任务序列

前言 封装processTasks函数&#xff0c;实现以下需求 /*** 依次顺序执行一系列任务* 所有任务全部完成后可以得到每个任务的执行结果* 需要返回两个方法&#xff0c;start用于启动任务&#xff0c;pause用于暂停任务* 每个任务具有原子性&#xff0c;即不可中断&#xff0c;只…...

CentOS系统下安装NVIDIA显卡驱动

一、安装显卡驱动 1.安装依赖项 yum -y install gcc pciutils yum -y install gcc yum -y install gcc-c yum -y install make2.查看内核版本 uname -a3.查看显卡版本 lspci | grep -i nvidia4.屏蔽系统自带的nouveau (1)查看nouveau lsmod | grep nouveau (2)打开blackl…...

Linux 与 Windows 服务器操作系统 | 全面对比

在服务器操作系统的领域&#xff0c;Linux 和 Windows 一直是两个备受关注的选择。 首先来看 Windows 操作系统。它由 Microsoft Corporation 开发&#xff0c;在桌面领域占据显著份额&#xff0c;其中 Windows 10 是使用最广泛的版本&#xff0c;广泛应用于个人计算机和企业桌…...

给既有exe程序添加一机一码验证

原文地址&#xff1a;李浩的博客 lihaohello.top 本科期间开发过一款混凝土基本构件设计程序&#xff0c;该程序是一个独立的exe可执行文件&#xff0c;采用VC静态链接MFC库编制而成。近期&#xff0c;需要为该程序添加用户注册验证的功能&#xff0c;从而避免任何用户获取该程…...

【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task2:头脑风暴会,巧灵脑筋急转弯(持续更新)

队伍名称&#xff1a;巧灵脑筋急转弯 队伍技术栈&#xff1a;python&#xff0c;LLM&#xff0c;RAG&#xff0c;大模型&#xff0c;nlp&#xff0c;Gradio&#xff0c;Vue&#xff0c;java 队友&#xff1a;知唐&#xff08;队长&#xff09;&#xff0c;我真的敲不动…...

mysql 多个外键

在MySQL中&#xff0c;一个表可以有多个外键约束&#xff0c;它们分别关联到不同的主表。在创建表时&#xff0c;可以在每个外键约束上指定不同的外键名称。以下是一个简单的例子&#xff0c;演示如何在创建表时定义多个外键&#xff1a; CREATE TABLE orders (order_id INT AU…...

解决方案上新了丨趋动科技推出基于银河麒麟操作系统的异构算力池化解决方案

趋动科技携手麒麟软件打造基于银河麒麟操作系统的异构算力池化解决方案&#xff0c;共同探索AI领域新场景。 人工智能技术作为数字经济发展的重要推手&#xff0c;在各行业业务场景中落地需要大量AI算力资源的有效保障。在IT基础设施普遍云化的今天&#xff0c;AI算力一方面需…...

14.创建一个实战maven的springboot项目

项目核心主要部分 pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…...

docker部署LNMP

docker部署LNMP nginx 1.22 172.111.0.10 docker-nginx mysql 8.0.30 172.111.0.20 docker-mysql php 8.1.27 172.111.0.30 docker-php docker&#xff1a;单节点部署&#xff0c;只能在一台机器上部署&#xff0c;如果跨机器容器无法操作&#xff0c;无法通信。 做高可用…...

在Spring Boot应用中,如果你希望在访问应用时加上项目的名称或者一个特定的路径前缀

在Spring Boot应用中&#xff0c;如果你希望在访问应用时加上项目的名称或者一个特定的路径前缀 在Spring Boot应用中&#xff0c;如果你希望在访问应用时加上项目的名称或者一个特定的路径前缀&#xff0c;你可以通过配置server.servlet.context-path属性来实现。这通常在app…...

东南大学:Wi-Fi 6搭档全光以太,打造“数智东南”信息高速路

东南大学&#xff1a;Wi-Fi 6搭档全光以太&#xff0c;打造“数智东南”信息高速路 - 华为企业业务 打好ICT底座&#xff0c;平台和应用层面就会非常通畅了。首先&#xff0c;出海企业的需求既有普遍性&#xff0c;也有垂直性行业的特性需求。普遍性需求需要通信、沟通数据和传…...

C++:stack类(vector和list优缺点、deque)

目录 前言 数据结构 deque vector和list的优缺点 push pop top size empty 完整代码 前言 stack类就是数据结构中的栈 C数据结构&#xff1a;栈-CSDN博客 stack类所拥有的函数相比与string、vector和list类都少很多&#xff0c;这是因为栈这个数据结构是后进先出的…...

负载均衡、高可用

负载均衡 负载均衡&#xff08;Load Balance&#xff09;&#xff1a;可以利用多个计算机和组合进行海量请求处理&#xff0c;从而获得很高的处理效率&#xff0c;也可以用多个计算机做备份&#xff08;高可用&#xff09;&#xff0c;使得任何一个机器坏了整个系统还是能正常…...

从Retrofit支持suspend协程请求说开去

在现代Android开发中&#xff0c;异步请求已经成为不可或缺的一部分。传统的异步请求往往涉及大量的回调逻辑&#xff0c;使代码难以维护和调试。随着Kotlin协程的引入&#xff0c;异步编程得到了极大的简化。而作为最流行的网络请求库之一&#xff0c;Retrofit早在Kotlin协程的…...

深入浅出:你需要了解的用户数据报协议(UDP)

文章目录 **UDP概述****1. 无连接性****2. 尽最大努力交付****3. 面向报文****4. 多种交互通信支持****5. 较少的首部开销** **UDP报文的首部格式****详细解释每个字段** **UDP的多路分用模型****多路分用的实际应用** **检验和的计算方法****伪首部的详细内容****检验和计算步…...

C++的Magic Static

什么是“Magic Static”&#xff1f; C 中&#xff0c;函数内部的静态变量只会在第一次执行该函数时被初始化&#xff0c;而且这种初始化在 C11 标准之后是线程安全的。这意味着即使多个线程同时第一次调用该函数&#xff0c;静态变量也只会被初始化一次&#xff0c;并且在初始…...

vscode添加宏定义

1 起因 在用vscode看项目代码时&#xff0c;如果源文件中的代码块被某个宏定义给包裹住了&#xff0c;则在vscode的默认配置下&#xff0c;不会高亮显示这块被包裹住的代码&#xff0c;如下图中229行开始的代码被STM32F40_41xxx所控制&#xff0c;没有高亮显示。 由于STM32F4…...

Postman接口关联

接口关联 接口之间存在依赖关系&#xff0c;接口B要依赖于接口A的返回值。 例如&#xff1a;现在有两个接口&#xff0c;接口1&#xff1a;获取接口统一鉴权码token接口&#xff0c;接口2&#xff1a;创建标签接口。接口2里的请求参数需要依赖接口1返回的值&#xff0c;即需要…...

用Python制作开心消消乐游戏|附源码

制作一个完整的“开心消消乐”风格的游戏在Python中是一个相对复杂的项目&#xff0c;因为它涉及到图形界面、游戏逻辑、动画效果以及用户交互等多个方面。不过&#xff0c;我可以为你提供一个简化的版本和概念框架&#xff0c;帮助你理解如何开始这个项目&#xff0c;并提供一…...

ArcGIS10.8 安装教程

目录 一、环境及安装包准备 二、安装流程 1、解压安装包ArcGIS_108.rar 2、安装 三、汉化 四、激活 五、自定义菜单&#xff08;可选&#xff09; 六、打开软件按查看 七、安装过程中出现的报错 八、其他 一、环境及安装包准备 安装环境&#xff1a;win7 安装包下载…...

2024网络安全学习路线,最全保姆级教程,学完直接拿捏!

关键词&#xff1a; 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 前排提示&#xff1a;文末有CSDN独家网络安全资料包&#xff01; 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有…...