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

类和对象:实现日期类

目录

概述

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

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

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://www.lryc.cn/news/2396964.html

相关文章:

  • 基于springboot的运动员健康管理系统
  • 华为云Flexus+DeepSeek征文 | 初探华为云ModelArts Studio:部署DeepSeek-V3/R1商用服务的详细步骤
  • 下载即转化的商业密码:解析华为应用商店CPD广告的智能投放逻辑
  • 分布式锁和数据库锁完成接口幂等性
  • 浅谈JMeter之常见问题Address already in use: connect
  • 【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)
  • 【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
  • 常规算法学习
  • Google 发布的全新导航库:Jetpack Navigation 3
  • Arbitrum Stylus 合约实战 :Rust 实现 ERC20
  • 电脑故障基础知识
  • 12.2Swing中JButton简单分析
  • 内存管理--《Hello C++ Wrold!》(8)--(C/C++)--深入剖析new和delete的使用和底层实现
  • JavaScript性能优化实战指南(详尽分解版)
  • 从 AMQP 到 RabbitMQ:核心组件设计与工作原理(一)
  • Java进阶---JVM
  • 鸿蒙OSUniApp离线优先数据同步实战:打造无缝衔接的鸿蒙应用体验#三方框架 #Uniapp
  • 地震资料裂缝定量识别——学习计划
  • C++ 检查一条线是否与圆接触或相交(Check if a line touches or intersects a circle)
  • 23. Merge k Sorted Lists
  • 每日算法刷题计划Day20 6.2:leetcode二分答案3道题,用时1h20min
  • Spring Security安全实践指南
  • Unity + HybirdCLR热更新 入门篇
  • QuickBASIC QB64 支持 64 位系统和跨平台Linux/MAC OS
  • ElasticSearch迁移至openGauss
  • 【C语言极简自学笔记】项目开发——扫雷游戏
  • Global Security Markets 第5章知识点总结
  • 电子电路:4017计数器工作原理解析
  • Vim 中设置插入模式下输入中文
  • GitHub 趋势日报 (2025年05月31日)