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

c++_运算符重载(时钟加减)

介绍

本文主要介绍 减号( - )、加号( + )、加等(+=)运算符重载并复现了时钟运行方式

源码

#include<iostream>using namespace std;class Time
{
public://加号计算函数void t_add(int& temp, const int& Right, bool& b){//判断时间是否大于 60if ((temp + Right) < 60)//当两数相加 小于60 则直接相加{temp += Right;b = 0;}else//当两数相加 大于60 则直接相加 后在减去60秒(分){temp += Right - 60;b = 1;}}//减号计算函数void t_sub(int& Left, const int& Right, bool& b){//判断左操作数是否大于右操作数if (Left > Right){//当左操作数大于右操作数则 直接两数相减Left -= Right;b = 0;}else{//当左操作数小于右操作数则 直接两数相减 后加上 60 秒(分)Left = (Left - Right) + 60;b = 1;}}//打印结果void print(){cout << "时间为:" << m_Hour << ":" << m_minute << ":" << m_second << endl;}
public://构造函数Time(int hour = 0, int minute = 0, int second = 0) :m_Hour(hour), m_minute(minute), m_second(second){}//加号重载Time operator+( const Time&Right){Time temp = *this;//用临时变量来接收 左操作数bool b = 0;//用来接收是否超过时间进制//秒针时间判断temp.t_add(temp.m_second, Right.m_second, b);if (b == 1)//b == 1代表秒针超过 60 秒了,需要分针加 1 分钟{/**************************************************利用 三目运算符 判断分针加 1 分针后是否超过 60 分针1.如果没超过则 “当前时间中 分针”加 1 分针2.如果超过则 “当前时间中 时针”加 1 小时**************************************************/(temp.m_minute + 1) < 60 ? (temp.m_minute += 1) : (temp.m_Hour += 1);}//分针时间判断temp.t_add(temp.m_minute, Right.m_minute, b);if (b == 1)//b == 1代表分针超过 60 分针了,需要时针加 1 小时{/**************************************************利用 三目运算符 判断时针加 1 小时后是否超过 24 小时1.如果没超过则 “当前时间中 时针”加 1 小时2.如果超过则归 0 小时**************************************************/(temp.m_Hour + 1) < 24 ? (temp.m_Hour += 1) : (temp.m_Hour = 0);}//时针时间判断/**************************************************利用 三目运算符 判断两个数相加是否超过 24 小时1.如果没超过则 相加两数,2.如果超过则 先相加两数,然后减 24 小时**************************************************/(temp.m_Hour + Right.m_Hour) < 24 ? (temp.m_Hour = temp.m_Hour + Right.m_Hour) : (temp.m_Hour = (temp.m_Hour + Right.m_Hour) - 24);b = 0;//初始化 bool	return temp;//返回临时变量}//减号重载Time operator-(const Time&Right){Time temp = *this;//用临时变量来接收 左操作数bool b = 0;//用来接收是否超过时间进制//秒针时间判断temp.t_sub(temp.m_second, Right.m_second, b);if (b == 1)//b == 1代表秒针超过 60 秒了,需要分针减 1 分钟{/*******************************************************判断减 1 分钟后是否小于等于 01.如果小于等于0 则先减 1 分针 在加 60 分钟,然后减 1 小时2.如果大于0 则减 1 分针*******************************************************/if ((temp.m_minute - 1) <= 0){temp.m_minute = (temp.m_minute - 1) + 60;temp.m_Hour -= 1;}else{temp.m_minute -= 1;}}//分针时间判断temp.t_sub(temp.m_minute, Right.m_minute, b);if (b == 1)//b == 1代表分针超过 60 分针了,需要时针减 1 小时{/*********************************************************利用 三目运算符 判断时针减 1 小时后小于等于 01.如果没超过则 “当前时间中 时针”减 1 小时,然后加 24 小时2.如果大于0 则减 1 小时*********************************************************/(temp.m_Hour - 1) <= 0 ? temp.m_Hour = (temp.m_Hour - 1) + 24 : temp.m_Hour -= 1;}//时针时间判断/*********************************************************利用 三目运算符 判断 两数相减 是否小于等于 01.如果没超过则 先相减两数,然后加 24 小时2.如果大于0 相减两数*********************************************************/(temp.m_Hour - Right.m_Hour) <= 0 ? temp.m_Hour = (temp.m_Hour - Right.m_Hour) + 24 : temp.m_Hour = temp.m_Hour - Right.m_Hour;b = 0;//初始化 bool	return temp;//返回临时变量}// += 重载(类内重载+=;效率高,因为类内直接返回操作数本身减少编译时间)Time& operator +=(Time&Right){*this = *this + Right;return *this;}
private:int m_Hour;//时针int m_minute;//分针int m_second;//秒针
};// += 重载(全局重载+=;效率低,需要重新构造一个左操作数会增加编译时间)
//Time& operator +=(Time&Left, const Time&Right)
//{
//	Left = Left + Right;
//	return Left;
//}
void main()
{// + 重载测试 结果 2:0:10Time t;Time t1(10, 20, 30);//设置初始时间10:20:30Time t2(15, 39, 40);//设置初始时间15:39:40t = t1 + t2;t.print();t1.print();t2.print();// - 重载测试 结果18:40:40cout << endl;Time t3(9, 20, 20);Time t4(14, 39, 40);t = t3 - t4;t.print();t3.print();t4.print();// += 重载测试cout << endl;t1 += t2;t1.print();system("pause");
}

运行结果

时间为:2:0:10时间为:17:39:50时间为:18:40:40
请按任意键继续. . .

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ElasticSearch之RestClient笔记
  • Python生成器 (Generators in Python)
  • 【二叉树】【DFS】104.二叉树的最大深度
  • golang 图片加水印,字体文件从哪里找
  • 英语打卡分析12
  • LabVIEW与PID在温度测控系统中的应用
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • LTPI协议的理解——2、LTPI实现的底层架构
  • JS学习之-01
  • Visual Studio 配置DLL
  • 【Java 进阶篇】Redis 缓存优化:提升应用性能的不二选择
  • Android笔记(二十三):Paging3分页加载库结合Compose的实现分层数据源访问
  • 2024年汉字小达人区级样题预测(基于近年真题)和备考建议
  • 如何使用Docker将.Net6项目部署到Linux服务器(三)
  • o2o生活通全开源尊享版+多城市切换+企业付款+交友IM+平台快报
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • JS 中的深拷贝与浅拷贝
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2017届校招提前批面试回顾
  • CEF与代理
  • Git的一些常用操作
  • LintCode 31. partitionArray 数组划分
  • 从0到1:PostCSS 插件开发最佳实践
  • 给第三方使用接口的 URL 签名实现
  • 理清楚Vue的结构
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 为什么要用IPython/Jupyter?
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 一道闭包题引发的思考
  • Python 之网络式编程
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # Panda3d 碰撞检测系统介绍
  • # SpringBoot 如何让指定的Bean先加载
  • #预处理和函数的对比以及条件编译
  • (10)STL算法之搜索(二) 二分查找
  • (31)对象的克隆
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (补)B+树一些思想
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (一)SvelteKit教程:hello world
  • (转载)虚函数剖析
  • .htaccess配置重写url引擎
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net 垃圾回收机制原理(二)
  • .NET8使用VS2022打包Docker镜像
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net操作Excel出错解决
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法