题目来源: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;
}