WUSTOJ 1447 重载1-时间类 【重载 | 输出流】

题目来源:http://acm.wust.edu.cn/problem.php?id=1447
在这里插入图片描述
在这里插入图片描述
★最近快蓝桥杯了,刷一些C++的题陶冶情操233~增加点信心也是有帮助的awa

相关知识:

主要就是重载了。为什么要重载呢?就是为了是类的对象之间的运算看起来更加直观,简单明了。
然后重载的格式如下:

返回类型 operator 运算符(形参表)
{
    函数体
}

运算符后面的就要作为形参。例如 有一个对象a和一个int型变量n 若 a+n 则形参表中填 (int n)
然后难点在于输出流,ostream是预定义的一个类,这个模板是我搜的,等我学到这个地方在补坑awa

注意:

1.少数几个运算符不能重载,如 类属关系运算符 ‘.’ 作用域分辨符’ :: ‘,三目运算符’ ? : ’ 等等…
2.重载后的运算符 优先级不会变,结合性也不会变~
3.有些运算符要重载两次,如++ ,因为++a和a++ 有不同的意义,

代码:

#include<bits/stdc++.h> 
using namespace std; 
class Time 
{ 
public: 
    Time (int h=1,int m=2,int s=3) {hour=h; minute=m; second=s;} 
    friend ostream & operator << (ostream &out,Time &t){ 
          out<<t.hour<<':'<<t.minute<<':'<<t.second; 
          return out; 
    } 
    void Set(int h=1,int m=2,int s=3) {hour=h; minute=m; second=s;} 
    Time operator - (int x); 
    Time operator + (int x); 
    int operator - (const Time &t){ 
         int h=hour-t.hour,m=minute-t.minute,s=second-t.second; 
         return h*3600+m*60+s; 
    } 
private: 
    int hour,minute,second; 
}; 
Time Time::operator + (int x) 
{ 
    int s=x+second; 
    int m=s/60+minute; 
    int h=(m/60+hour); 
    return Time(h%24,m%60,s%60); 
} 
Time Time::operator - (int x) 
{ 
    int h=hour-x/3600; x%=3600; 
    int m=minute-x/60; x%=60; 
    int s=second-x; 
    if(s<0) {s+=60; m--;} 
    if(m<0) {m+=60; h--;} 
    if(h<0) h+=24; 
    return Time(h,m,s); 
} 
int main()
{
    Time t1,t2(23,55,30);
    int n,h,m,s;
    cout<<"T1="<<t1<<"  "<<"T2="<<t2<<endl;
    while(cin>>n)
    {
        t1=t2+n;
        cout<<"T1="<<t1<<"  "<<"T2="<<t2<<endl;
        cin>>h>>m>>s;
        t2.Set(h,m,s);
        cout<<"T1="<<t1<<"  "<<"T2="<<t2<<"  "<<"T1-T2="<<t1-t2<<"  "<<"T2-T1="<<t2-t1<<endl;
        cin>>n;
        t2=t1-n;
        cout<<"T1="<<t1<<"  "<<"T2="<<t2<<endl;
        cin>>n;
        t2=t1-n;
        cout<<"T1="<<t1<<"  "<<"T2="<<t2<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43890662/article/details/88747980