6-48.日期类的设计与实现

使用重载运算符(++,+=,<<等)实现日期类的操作。功能包括:
1)设置日期,如果日期设置不符合实际,则设置为默认日期(1900年1月1日)
2)在日期对象中向日期添加1或者加若干天(加入日期值后根据实际的日期进行月份、年份的变化)
3)重载流插入运算符进行

输入样例:

在这里给出一组输入。例如:

13 38 100

12 31 2009

2 28 2000

输出样例:

在这里给出相应的输出。例如:

d1 is January 1, 1900

d2 is December 31, 2009

d1 += 7 is January 8, 1900

d2 is December 31, 2009

++d2 is January 1, 2010

Testing the prefix increment operator:

d3 is February 28, 2000

++d3 is February 29, 2000

d3 is February 29, 2000

Testing the postfix increment operator:

d3 is February 29, 2000

d3++ is February 29, 2000

d3 is March 1, 2000

日期的输出,其中月份要用名称表示

代码实现:

#include  <string>
#include  <iostream>
using  namespace  std;/*  请在这里填写答案  */
class MyDate{private:int y,m,d;int flag1,flag2,flag3;public:void setDate(int ma,int da,int ya){y = ya;m = ma;d = da;}friend ostream& operator <<(ostream &out,MyDate &date);void flag(){if((y%4==0&&y%100!=0)||y%400==0){		//闰年 flag1=1;}else{flag1=0;}if(m<=7){switch(m%2){						//大月小月 case 0 :flag2 = 0;break;case 1:flag2 = 1;break;}}else{switch(m%2){case 0:flag2 = 1;case 1:flag2 = 0; }}if(m==2)flag3=1;						//二月 else flag3 = 0;}void update(){int brk=0;int cunt=0;while(cunt<15){flag();	if(d>28){if(d==29){if(flag1==0&&flag3==1){			//平年且2月 d-=28;m+=1;}else brk=1;}else if(d==30){if(flag1==1&&flag3==1){			//闰年且2月 d-=29;m+=1;}else brk=1;}else if(d==31){if(flag2==0){					//若为小月 d-=30;m+=1; }else brk=1;}else{								//此时无论如何要进 1d-=31;m+=1;} }else{brk=1;}if(m>12){m-=12;y+=1;}if(brk==1)break;cunt++;}}MyDate& operator+=(int n){this->d+=n;update();return *this;}MyDate& operator++(){d++;update();return *this;}MyDate& operator++(int){MyDate *rs = new MyDate(*this);++d;update();return *rs;}	
};
ostream& operator <<(ostream &out,MyDate &date){string month;if(date.y<1900||date.m<=0||date.m>12||date.d<0||date.d>31){date.y=1900;date.m=1;date.d=1;out<<"January 1, 1900"<<endl;return out;}switch(date.m){case 1:month = "January";break;case 2:month = "February";break;case 3:month = "March";break;case 4:month = "April";break;case 5:month = "May";break;case 6:month = "June";break;case 7:month = "July";break;case 8:month = "Augest";break;case 9:month = "September";break;case 10:month = "October";break;case 11:month = "November";break;case 12:month = "December";break;}out<<month<<" "<<date.d<<","<<date.y<<endl;return out;
}int  main()
{int  m,d,y;MyDate  d1,d2,d3;cin>>m>>d>>y;d1.setDate(m,d,y);cin>>m>>d>>y;d2.setDate(m,d,y);cin>>m>>d>>y;d3.setDate(m,d,y);cout  <<  "d1  is  "  <<  d1  <<  "\nd2  is  "  <<  d2;cout  <<  "\n\nd1  +=  7  is  "  <<  (  d1  +=  7  );cout  <<  "\n\n  d2  is  "  <<  d2;cout  <<  "\n++d2  is  "  <<  ++d2;cout  <<  "\n\nTesting  the  prefix  increment  operator:\n"<<  "  d3  is  "  <<  d3  <<  endl;cout  <<  "++d3  is  "  <<  ++d3  <<  endl;cout  <<  "  d3  is  "  <<  d3;cout  <<  "\n\nTesting  the  postfix  increment  operator:\n"<<  "  d3  is  "  <<  d3  <<  endl;cout  <<  "d3++  is  "  <<  d3++  <<  endl;cout  <<  "  d3  is  "  <<  d3  <<endl;
}  

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

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

相关文章

Java 表达式引擎

企业的需求往往是多样化且复杂的&#xff0c;对接不同企业时会有不同的定制化的业务模型和流程。我们在业务系统中使用表达式引擎&#xff0c;集中配置管理业务规则&#xff0c;并实现实时决策和计算&#xff0c;可以提高系统的灵活性和响应能力。 引入规则引擎似乎就能解决这个…

数据结构:堆的实现思路

我们之前写过堆的实现代码&#xff1a;数据结构&#xff1a;堆的实现-CSDN博客 这篇文章我们了解一下堆到底是如何实现的 1.堆向下调整算法 现在我们给出一个数组&#xff0c;逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆 向下调…

栈的链式存储(详解)

栈的链式存储 栈的链式存储是通过链表来实现的&#xff0c;每个节点包含一个元素和一个指向下一个节点的指针。链式存储的栈不需要提前分配内存空间&#xff0c;可以动态地增加或减少元素。 在链式存储中&#xff0c;栈顶元素通常是链表的头节点&#xff0c;栈底元素是链表的…

高光谱遥感影像分类项目开源

热烈欢迎大家在git上star&#xff01;&#xff01;&#xff01;冲鸭&#xff01;&#xff01;&#xff01; 我研究生期间主要是做高光谱遥感影像分类的&#xff0c;毕业论文也是基于深度学习的高光谱遥感影像分类课题&#xff0c;转眼间已经毕业四年了&#xff0c;如今把这块材…

每天一点python——day84

#每天一点Python——84 #异常处理机制try—except—else #异常处理机制try—except—else如果try块中没有抛出异常&#xff0c;则执行else块&#xff0c;如果try中抛出异常&#xff0c;则执行except块#示例&#xff1a; try:a int(input(请输入第一个整数&#xff1a;))b in…

SpringBootAdmin监控原理Actuator,自定义指标

SpringBootAdmin监控原理Actuator&#xff0c;自定义指标 文章目录 SpringBootAdmin监控原理Actuator&#xff0c;自定义指标actuator自定义info端点信息自定义Health端点信息自定义metrics端点信息端点的自定义 actuator JMX方式就是在cmd控制台输入jconsole&#xff0c;会弹出…

递归实现组合型枚举

递归实现组合型枚举 #include<iostream> #include<vector>int n, m; std::vector<int>res; bool st[30];void Print() {for(int i0;i<res.size();i){printf("%d ",res[i]);}puts(""); }void dfs(int num) {if (res.size() m){Print(…

使用docker切换任意版本cuda使用GPU

1.现存问题 在主机上运行很多下载来的机器学习代码时&#xff0c;这些大都运行在不同版本的tensorflow-gpu或者pytorch等的包下的。但是&#xff0c;运行代码的过程中&#xff0c;存在匹配的问题&#xff1a; 1.不同的版本的tensorflow-gpu或pytorch对cuda版本的适配也不一样…

Upsert 及冲突(GORM)

GORM支持了数据库的upsert操作 upsert操作对于插入一条数据而言的&#xff0c;如果插入数据之前&#xff0c;没有这条数据&#xff0c;则会插入该条数据&#xff1b;如果插入数据之前就存在这条数据&#xff08;索引值&#xff09;&#xff0c;就更新这条记录。 创建结构体 …

html电子签名

html电子签名 html5实现手写签名板&#xff0c;点击保存即可生成base64格式的图片 使用H5自带的canvas&#xff0c;无需引入js无需引入别的js 效果图 html代码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"…

VisionPro---PatMaxTool工具使用

CogPMAlignTool PatMax是一种图案位置搜索技术&#xff08;识别定位&#xff09;&#xff0c;PatMax图案不依赖于像素格栅&#xff0c;是基于边缘特征的模板匹配而不是基于像素的模板匹配&#xff0c;支持图像中特征的旋转与缩放&#xff0c;边缘特征表示图像中不同区域间界限…

zookeeper+kafka+ELK+filebeat集群

目录 一、zookeeper概述&#xff1a; 1、zookeeper工作机制&#xff1a; 2、zookeeper主要作用&#xff1a; 3、zookeeper特性&#xff1a; 4、zookeeper的应用场景&#xff1a; 5、领导者和追随者&#xff1a;zookeeper的选举机制 二、zookeeper安装部署&#xff1a; 三…

基于SSH的员工管理系统(一)——包结构

基于SSH的员工管理系统&#xff08;一&#xff09;——包结构 包结构 1、整体包结构 2、action包 3、domain实体包 4、service层 5、dao层 6、util工具包 7、页面层

音视频的功耗优化

前言 在应用中&#xff0c;录制与音视频模块往往是高耗能的模块&#xff0c;设备容易发热&#xff0c;影响体验。 什么是功耗优化 手机有多个耗电模块&#xff0c; SOC(CPU&#xff0c;GPU&#xff0c;DDR)&#xff0c;Display&#xff0c;Audio&#xff0c;Video&#xff0…

CSS3 修改滚动条样式

上图&#xff1a; 上代码&#xff1a; /* 修改垂直滚动条 */ .right-list::-webkit-scrollbar {width: 2px; /* 修改宽度 */height: 5px; /* 修改高度 */ } /* 修改滚动条轨道背景色 */ .right-list::-webkit-scrollbar-track {background-color: #f1f1f1; } /* 修改滚动条滑块…

AD使用交互式BOM插件时应该注意到的一个问题

交互式BOM脚本 插件下载&#xff1a;GitHub - lianlian33/InteractiveHtmlBomForAD 或&#xff1a;GitHub - yukaichao/InteractiveHtmlBom-plugin-for-AD 或&#xff1a;InteractiveHtmlBomForAD-master.zip - 蓝奏云 问题&#xff1a;当PCB文件中出现MARK点时&#xff0c;…

【ArcGIS Pro微课1000例】0043:深度学习--框架库安装

ArcGIS Pro 中的所有深度学习地理处理工具都要求安装支持的深度学习框架库。 文章目录 深度学习框架库下载深度学习框架库安装注意事项深度学习框架库下载 由于是python开发,可以采用安装包与Pip两种方式安装,本文讲解采用安装包安装。 点击深度学习框架库下载,打开网站,…

常见的线程安全问题及解决

1. 什么是线程安全 线程安全指的是当多个线程同时访问一个共享的资源时&#xff0c;不会出现不确定的结果。这意味着无论并发线程的调度顺序如何&#xff0c;程序都能够按照设计的预期来运行&#xff0c;而不会产生竞态条件&#xff08;race condition&#xff09;或其他并发问…

绘制颜色矩的直方图

# 代码5-2 绘制颜色矩的直方图 def color_moments(img, trans_hsvFalse):if trans_hsv True:img cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 颜色分割f, s, t cv2.split(img)# 创建特征存放列表color_feature []# 一阶f_mean np.mean(f)s_mean np.mean(s)t_mean np.mean(t)…

wordpress路径怎么优化?wordpress伪静态怎么做?

Wordpress这个程序是动态的&#xff0c;在后台中设置链接的格式为朴素&#xff0c;就可以了&#xff0c;这样简单又方便&#xff0c;因为百度对于路径的都是一样对待的&#xff0c;静态路径和动态路径&#xff0c;都是一样的对待。 有的时候&#xff0c;有的人会认为动态路径不…