时间类--运算符重载函数--gyy

2024-01-10 13:18

本文主要是介绍时间类--运算符重载函数--gyy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*
定义一个时间类Time,其成员如下:
有3个私有数据成员hour、min、sec,分别表示时间类中的时、分、秒
公有成员函数声明如下,函数体自己填写:
Time(int h, int m, int s);//带3个参数值的构造函数,注意时间是有规则的,注意在传递参数时如果遇到非法时间,则将hour、min、sec值都设为0 或要求重新输入
~Time();//析构函数
void  setTime(int h,int m,int s); //重新设置时间
void  showTime(); //显示时间
void  timeAdd(int h, int m ,int s);//进行时间相加,参数为时、分、秒
void  timeAdd(int s); //进行时间相加,参数为秒利用运算符重载函数作为友元函数来完成相应类对象的操作
friend Time operator+(Time t1,Time t2);   
friend Time operator+(Time t1,int s);friend bool operator>(Time t1,Time t2);
friend bool operator<(Time t1,Time t2);  
friend bool operator==(Time t1,Time t2); 
friend bool operator!=(Time t1,Time t2); friend ostream & operator<<(ostream & output,Time & t);
friend istream & operator>>(istream & input,Time & t);利用运算符重载函数作为成员函数来完成相应类对象的操作
Time operator++();  
Time operator++(int);在主函数中建立Time对象,通过对象调用成员函数来完成相应操作。
*/
#include <iostream.h>class Time
{public:Time(int h=0, int m=0, int s=0); //带3个参数值的构造函数,注意时间是有规则的,注意在传递参数时如果遇到非法时间,则将hour、min、sec值都设为0 或要求重新输入~Time();//析构函数void  setTime(int h,int m,int s); //重新设置时间void  showTime(); //显示时间void  timeAdd(int h, int m ,int s); //进行时间相加,参数为时、分、秒void  timeAdd(int s); //进行时间相加,参数为秒 Time operator++();   //对++进行运算符重载,作为对象的前置运算符Time operator++(int);  //对++进行运算符重载,作为对象的后置运算符friend Time operator+(Time t1,Time t2);  //对+进行运算符重载,完成对两个Time类对象的相加操作friend Time operator+(Time t1,int s);  //对+进行运算符重载,完成对1个Time类对象和整数的相加操作friend ostream & operator<<(ostream & output,Time & t); //对<<进行运算符重载,完成对Time类对象的输出操作friend istream & operator>>(istream & input,Time & t);  //对>>进行运算符重载,完成对Time类对象的输入操作friend bool operator>(Time t1,Time t2); //对>进行运算符重载,完成对两个Time类对象的大于比较操作friend bool operator<(Time t1,Time t2);  //对<进行运算符重载,完成对两个Time类对象的小于比较操作friend bool operator==(Time t1,Time t2);  //对==进行运算符重载,完成对两个Time类对象的等于比较操作friend bool operator!=(Time t1,Time t2);  //对!=进行运算符重载,完成对两个Time类对象的不等于比较操作private:int hour; int min;int sec;
};Time::Time(int h, int m, int s) //带3个参数值的构造函数,注意时间是有规则的,注意在传递参数时如果遇到非法时间,则将hour、min、sec值都设为0 或要求重新输入
{hour=(h>=0&&h<24)?h:0;min=(m>=0&&m<60)?m:0;sec=(s>=0&&s<60)?s:0;
}Time:: ~Time()//析构函数
{
}void  Time::setTime(int h,int m,int s) //重新设置时间
{hour=(h>=0&&h<24)?h:0;min=(m>=0&&m<60)?m:0;sec=(s>=0&&s<60)?s:0;
}void  Time::showTime()  //显示时间
{cout<<hour<<":"<<min<<":"<<sec<<endl;
}void  Time::timeAdd(int h, int m ,int s) //进行时间相加,参数为时、分、秒
{if(h<0||h>=24||m<0||m>=60||s<0||s>=60){cout<<"时间参数有误,计算时间相加不成功"<<endl;}else{cout<<hour<<":"<<min<<":"<<sec;hour=(hour+h+(min+m+(sec+s)/60)/60)%24;min=(min+m+(sec+s)/60)%60;sec=(sec+s)%60;cout<<"+"<<h<<":"<<m<<":"<<s<<"="<<hour<<":"<<min<<":"<<sec<<endl;}    
}void  Time::timeAdd(int s) //进行时间相加,参数为秒 
{cout<<hour<<":"<<min<<":"<<sec;hour=(hour+(min+(sec+s)/60)/60)%24;min=(min+(sec+s)/60)%60;sec=(sec+s)%60;cout<<"+"<<s<<"="<<hour<<":"<<min<<":"<<sec<<endl;
}Time Time::operator++()  //对++进行运算符重载,作为对象的前置运算符
{ hour=(hour+(min+(sec+1)/60)/60)%24;min=(min+(sec+1)/60)%60;sec=(sec+1)%60;return *this;  //返回改变后的对象
}Time Time::operator++(int)  //对++进行运算符重载,作为对象的后置运算符
{Time temp=*this;hour=(hour+(min+(sec+1)/60)/60)%24;min=(min+(sec+1)/60)%60;sec=(sec+1)%60;return temp;  //返回改变前的对象
}Time operator+(Time t1,Time t2)//对+进行运算符重载,完成对两个Time类对象的相加操作
{Time t3;t3.hour=(t1.hour+t2.hour+(t1.min+t2.min+(t1.sec+t2.sec)/60)/60)%24;t3.min=(t1.min+t2.min+(t1.sec+t2.sec)/60)%60;t3.sec=(t1.sec+t2.sec)%60;return t3;
}Time operator+(Time t1,int s) //对+进行运算符重载,完成对1个Time类对象和整数的相加操作
{Time t2;t2.hour=(t1.hour+(t1.min+(t1.sec+s)/60)/60)%24;t2.min=(t1.min+(t1.sec+s)/60)%60;t2.sec=(t1.sec+s)%60;return t2;
}ostream & operator<<(ostream & output,Time & t) //对<<进行运算符重载,完成对Time类对象的输出操作
{output<<t.hour<<":"<<t.min<<":"<<t.sec<<endl;return output;
}istream & operator>>(istream & input,Time & t) //对>>进行运算符重载,完成对Time类对象的输入操作
{cout<<"input the hour :";input>>t.hour;cout<<"input the min :";input>>t.min;cout<<"input the sec:";input>>t.sec;return input;
}bool operator>(Time t1,Time t2) //对>进行运算符重载,完成对两个Time类对象的大于比较操作{if(t1.hour>t2.hour)return true;if(t1.hour==t2.hour&&t1.min>t2.min)return true;if(t1.hour==t2.hour&&t1.min==t2.min&&t1.sec>t2.sec)return true;return false;}bool operator<(Time t1,Time t2) //对<进行运算符重载,完成对两个Time类对象的小于比较操作{if(t1.hour<t2.hour)return true;if(t1.hour==t2.hour&&t1.min<t2.min)return true;if(t1.hour==t2.hour&&t1.min==t2.min&&t1.sec<t2.sec)return true;return false;}bool operator==(Time t1,Time t2) //对==进行运算符重载,完成对两个Time类对象的等于比较操作{if(t1.hour==t2.hour&&t1.min==t2.min&&t1.sec==t2.sec)return true;elsereturn false;  }bool operator!=(Time t1,Time t2) //对!=进行运算符重载,完成对两个Time类对象的不等于比较操作{if(t1.hour==t2.hour&&t1.min==t2.min&&t1.sec==t2.sec)return false;elsereturn true;  }int main()
{Time t1(1,2,3);   //定义时间对象cout<<"t1=";t1.showTime();    //显示时间信息t1.timeAdd(2,3,4);   //进行分、时、秒的相加操作cout<<"t1=";t1.showTime();    //显示时间信息t1.timeAdd(22,59,4);  //进行分、时、秒的相加操作cout<<"t1=";t1.showTime();   //显示时间信息t1.timeAdd(155);  //进行秒的相加操作cout<<"t1=";t1.showTime();   //显示时间信息Time t2(25,62,-9); //定义时间对象cout<<"t2=";t2.showTime(); //显示时间信息cout<<endl;t2=t1++;   //++运算符重载函数调用,对象后置运算符cout<<"after  t2=t1++"<<endl;cout<<"t1=";t1.showTime();cout<<"t2=";t2.showTime();t2=++t1; //++运算符重载函数调用,对象前置运算符cout<<"after  t2=++t1"<<endl;cout<<"t1=";t1.showTime();cout<<"t2=";t2.showTime();Time t3;t3=t1+t2;  //+运算符重载函数调用,完成两个对象相加cout<<"after  t3=t1+t2"<<endl;cout<<"t3=";t3.showTime();t3=t3+100; //+运算符重载函数调用,完成一个对象和秒的相加cout<<"after  t3=t3+100"<<endl;cout<<"t3=";t3.showTime();cout<<"input t1 again"<<endl;cin>>t1;          //>>运算符重载函数调用,完成对象输入cout<<"t1="<<t1;  //<<运算符重载函数调用,完成对象输出cout<<"input t2 again"<<endl;cin>>t2;         //>>运算符重载函数调用,完成对象输入cout<<"t2="<<t2; //<<运算符重载函数调用,完成对象输出if(t1>t2)     //>运算符重载函数调用,完成对象比较cout<<"t1>t2"<<endl;if(t1<t2)     //<运算符重载函数调用,完成对象比较cout<<"t1<t2"<<endl;if(t1==t2)    //==运算符重载函数调用,完成对象比较cout<<"t1==t2"<<endl;if(t1!=t2)    //!=运算符重载函数调用,完成对象比较cout<<"t1!=t2"<<endl;return 0;
}




这篇关于时间类--运算符重载函数--gyy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590936

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数