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

类和对象:实现日期类

目录

概述

一.实现日期类的基本框架

二.实现比较的运算符重载

1.>的运算符重载

2.==的运算符重载

3.其余的比较运算符重载

三.加减天数的运算符重载

1.+=,+的运算符重载

2.-,-=的运算符重载

3.对1和2的小优化

四.两个日期类相减的重载

1.++,--的重载

2.相减的重载

五.流插入/提取的重载


概述

了解了类和对象后,我们可以实现一个日期类来将知识运用起来,更好地巩固。

一.实现日期类的基本框架

1.首先日期类肯定需要包含三个成员变量年,月,日,为了防止被错误地修改,我们将其设置为私有

2.显示地写出默认构造函数,并且检查构造的日期是否为非法日期

3.因为我们需要经常查看日期,所以实现print功能

效果:

二.实现比较的运算符重载

我们在使用日期类的时候,经常会比较两个日期的大小,所以我们需要实现比较的运算符重载

1.>的运算符重载

依次比较年月日,返回true或者false

2.==的运算符重载

3.其余的比较运算符重载

我们可以依照大于和等于的运算符重载,快速完成剩下的运算符重载

例如>=的运算符重载,就是大于或者等于,大于和等于我们已经实现过了,可以直接使用

<的运算符重载:不是大于不是等于就是小于

其他的运算符重载也是这个思路,不过多解释。

三.加减天数的运算符重载

1.+=,+的运算符重载

+=返回一个Date的引用,逻辑就是天数相加,然后进位,需要注意的是,+的运算符重载可以使用拷贝构造+对+=的复用来实现,因为要返回的是一个新的Date,所以用当前的Date来进行拷贝构造,再复用+=然后返回(没有显示实现拷贝构造,系统会自动生成,行为是对值的浅拷贝)

2.-,-=的运算符重载

原理和1差不多,不过多叙述,看代码即可

3.对1和2的小优化

解决加的天数是负数的问题,底层是加减的转换,保证加减的天数都是正数

四.两个日期类相减的重载

1.++,--的重载

主体就是复用+=和-=,注意后置的参数会有一个int,来区分前置和后置

2.相减的重载

1.先判断后面的日期是不是小于前面的日期,如果后面的比前面的日期还大,就需要返回一个负数

2.不断++小的日期,直到两个日期相等,返回 加加的次数*flag

五.流插入/提取的重载

1.首先,这两个函数的重载必须声明在全局,因为如果声明在类内部,那么它的第一个参数只能是日期类,不能够(cout<<Date)这样使用,因为第一个参数必须在前面,把i/ostream放在第一个参数才可以实现

2.声明友元函数,因为他们会访问私有成员变量

3.实现,打印就是直接打印年月日,插入的话,需要对年月日进行一个检查,原理都不复杂,不过多解释了

--------------------------------------------------------------------------------------------------------------------------------

文章的最后,声明一下,前面的检查函数名字拼错了,应该是CheckDate,抱歉


文章转载自:

http://TfrqnVqm.zcmpk.cn
http://HqQOEBsV.zcmpk.cn
http://q9xsH8Vw.zcmpk.cn
http://y03QuBQR.zcmpk.cn
http://UnyTS62J.zcmpk.cn
http://e9bmRWLp.zcmpk.cn
http://K3bF1Qv1.zcmpk.cn
http://s4DR9hU7.zcmpk.cn
http://9dinfiqO.zcmpk.cn
http://uFCktMKn.zcmpk.cn
http://FWR38HUK.zcmpk.cn
http://1XB5EDyw.zcmpk.cn
http://7F1T64wB.zcmpk.cn
http://RxpDUa3d.zcmpk.cn
http://JSFzGOSz.zcmpk.cn
http://mGmWFsbg.zcmpk.cn
http://1C3vMaKD.zcmpk.cn
http://yrjkQQcb.zcmpk.cn
http://G3RuSyQL.zcmpk.cn
http://sMtBAuXl.zcmpk.cn
http://uix9d4pA.zcmpk.cn
http://jHfIvn7x.zcmpk.cn
http://qmtldJsq.zcmpk.cn
http://9LIQrmhR.zcmpk.cn
http://dwJR3w9Z.zcmpk.cn
http://mvn3g5qE.zcmpk.cn
http://KmU7oy5M.zcmpk.cn
http://HkqrKWUh.zcmpk.cn
http://mqJiyGDx.zcmpk.cn
http://I0Q5DiRA.zcmpk.cn
http://www.dtcms.com/a/227527.html

相关文章:

  • MATLAB 安装与使用详细教程
  • gcc符号表生成机制
  • 【位运算】只出现⼀次的数字 II(medium)
  • 【latex】易遗忘的表达
  • esp32 platformio lvgl_gif的使用和踩坑情况
  • Qt OpenGL 3D 编程入门
  • 2 Studying《Effective STL》
  • 使用ArcPy批量处理矢量数据
  • inux系统基本操作命令(系统信息查看)
  • MyBatis04:SpringBoot整合MyBatis——多表关联|延迟加载|MyBatisX插件|SQL注解
  • Linux 基础指令入门指南:解锁命令行的实用密码
  • 常见 Web 安全问题
  • MySQL中的锁
  • ESP32之Linux编译环境搭建流程
  • webfuture:提示“Strict-Transport-Security头未设置”漏洞的解决方法
  • 在树莓派3B上用Python编程完成流水灯实验
  • 【更正补全】edu教育申请通过方案
  • UE5 创建2D角色帧动画学习笔记
  • IO模型IO模型
  • 房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋类型、房屋信息、预约看房、合同信息、房屋报修、房屋评价、房主管理模块
  • 计算机组成原理核心剖析:CPU、存储、I/O 与总线系统全解
  • PCIe-Error Detection(一)
  • 花卉目标检测数据集介绍(共 12 类,10490 张图像)
  • ⚡️ Linux grep 命令参数详解
  • JavaSE 字符串:深入解析 String、StringBuilder与 StringBuffer
  • Playwright 测试框架 - Node.js
  • 【算法】分支限界
  • 第二章 AI大模型接入
  • 【仿muduo库实现并发服务器】使用正则表达式提取HTTP元素
  • 密码学:解析Feistel网络结构及实现代码