第八周项目2:Time类中的运算符重载
来源:互联网 发布:我的网络ip地址 编辑:程序博客网 时间:2024/05/21 11:34
问题及代码:
/**Copyright (c)2015,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:project.cpp*作 者:陈文青*完成日期:2015年5月9日*版 本 号:v1.0**问题描述:实现Time类中的运算符重载*程序输入:*程序输出:*/#include <iostream>using namespace std;class CTime{private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒public: CTime(int h=0,int m=0,int s=0); void setTime(int h,int m,int s); void display(); //二目的比较运算符重载 bool operator > (CTime &t); bool operator < (CTime &t); bool operator >= (CTime &t); bool operator <= (CTime &t); bool operator == (CTime &t); bool operator != (CTime &t); //二目的加减运算符的重载 //返回t规定的时、分、秒后的时间 //例t1(8,20,25),t2(11,20,50),t1+t2为19:41:15 CTime operator+(CTime &t); CTime operator-(CTime &t);//对照+理解 CTime operator+(int s);//返回s秒后的时间 CTime operator-(int s);//返回s秒前的时间 //二目赋值运算符的重载 CTime operator+=(CTime &c); CTime operator-=(CTime &c); CTime operator+=(int s);//返回s秒后的时间 CTime operator-=(int s);//返回s秒前的时间};//构造函数CTime::CTime(int h,int m,int s){ hour=h; minute=m; second=s;}// 设置时间void CTime::setTime(int h,int m,int s){ hour=h; minute=m; second=s;}//输出时间void CTime::display(){ cout<<hour<<":"<<minute<<":"<<second<<endl;}//比较运算符的重载bool CTime::operator > (CTime &t) // 判断时间t1>t2{ if (hour>t.hour) return true; if (hour<t.hour) return false; if (minute>t.minute) return true; if (minute<t.minute) return false; if (second>t.second) return true; return false;}bool CTime::operator < (CTime &t)// 判断时间t1<t2{ if (hour<t.hour) return true; if (hour>t.hour) return false; if (minute<t.minute) return true; if (minute>t.minute) return false; if (second<t.second) return true; return false;}bool CTime::operator == (CTime &t)// 判断时间t1==t2{ if (*this<t || *this>t) return false;//充分利用已经定义好的运算符来进行相关运算符的定义 return true;}bool CTime::operator != (CTime &t) // 判断时间t1!=t2{ if (*this==t) return false;//充分利用已经定义好的运算符 return true;}bool CTime::operator >= (CTime &t)// 判断时间t1>=t2{ if (*this<t) return false; return true;}bool CTime::operator <= (CTime &t) // 判断时间t1<=t2{ if (*this>t) return false; return true;}//二目的加减运算符的重载//返回t规定的时、分、秒后的时间//例t1(8,20,25),t2(11,20,50),t1+t2为19:41:15CTime CTime::operator+(CTime &t){ int h,m,s; s=second+t.second; m=minute+t.minute; h=hour+t.hour; if (s>59) { s-=60; m++; } if (m>59) { m-=60; h++; } while (h>23) h-=24; CTime t0(h,m,s); return t0;}// 计算时间之差CTime CTime::operator - (CTime &t){ int h,m,s; s=second-t.second; m=minute-t.minute; h=hour-t.hour; if (s<0) { s+=60; m--; } if (m<0) { m+=60; h--; } while (h<0) h+=24; CTime t0(h,m,s); return t0;}//返回s秒后的时间CTime CTime::operator+(int s){ int ss=s%60; int mm=(s/60)%60; int hh=s/3600; CTime t0(hh,mm,ss); return *this+t0; //利用已经定义好的假发运算符}//返回s秒前的时间CTime CTime::operator-(int s){ int ss=s%60; int mm=(s/60)%60; int hh=s/3600; CTime t0(hh,mm,ss); return *this-t0;}//赋值运算符的重载CTime CTime::operator+=(CTime &c){ *this=*this+c; return *this;}CTime CTime::operator-=(CTime &c){ *this=*this-c; return *this;}CTime CTime::operator+=(int s)//返回s秒后的时间{ *this=*this+s; return *this;}CTime CTime::operator-=(int s)//返回s秒前的时间{ *this=*this-s; return *this;}int main(){ CTime t1(8,20,25),t2; t2.setTime(11,20,50); t1.display(); t2.display(); if(t1>=t2) cout<<"t1>=t2"<<endl; else cout<<"t1<t2"<<endl; cout<<"t1+t2="; (t1+t2).display(); cout<<"t1+100="; (t1+100).display(); cout<<"t1="; t1.display(); cout<<"t1-=100="; (t1-=100).display(); cout<<"t1="; t1.display(); return 0;}
运行结果:
知识点总结:
Time类中的运算符重载
学习心得:
1.运算符重载,要学会充分使用已经重载过的运算符进行相关运算符重载。
2.要注意返回值的类型。
3.比较运算符要注意逻辑关系,避免定义错误,这时候便需要单步调试进行检查。
0 0
- 第八周 项目2 TIME类中的运算符重载
- 第八周 项目2 Time类中的运算符重载
- 第八周项目2-TIME类中的运算符重载
- 第八周 项目2-Time类中的运算符重载
- 第八周项目2-time类中的运算符重载
- 第八周项目2 TIME类中的运算重载符
- 第八周【项目2-Time类中的运算符重载】
- 第八周【项目2-Time类中的运算符重载】
- 第八周项目2-Time类中的运算符重载
- 第八周 项目2 Time类中的运算符重载
- 第八周项目2 Time类中的运算符重载
- 第八周项目2-Time类中的运算符重载
- 第八周 【项目2-Time类中的运算符重载】
- 第八周项目2:Time类中的运算符重载
- 第八周项目2-Time类中的运算符重载
- 第八周项目-2-time类中的运算符重载
- 第八周项目2-Time类中的运算符重载
- 第八周项目二----time类中的运算符重载
- AsyncTaskLoader vs AsyncTask
- UVA LA3516,分支法加上递归和递推
- python安装twist
- JAVA 线程 之 初级线程安全
- sql server 常见等待状态分析
- 第八周项目2:Time类中的运算符重载
- spring学习笔记(17)——返回通知&异常通知&环绕通知
- 微营销好标题之金玉良言(微营销标题吸引粉丝篇-4)
- 设置网站默认页面
- 分区以及grub恢复
- 学习笔记:实现linux下文件内容的复制
- JS字符串和数组操作方法(转载)
- spring依赖注入(1)-基础
- boost中的unordered_map使用方法