【问题描述】
对前面实验写过的Time类进行修改,删去Add和Sub成员函数,通过重载“+”、“-”运算符直接进行时间的加减运算。
提示:
(1)可以用友元函数来实现“+”“-”运算符的重载。
(2)加法运算符可以是两个Time对象进行相加,也可以是一个表示秒数的int型数据加上一个Time对象,还可以是Time对象加上int型数据,得到的结果都是Time类型的对象。
(3)减法运算符可以是两个Time对象进行相减,也可以是Time对象减去一个表示秒数的int型数据,得到的结果都是Time类型的对象。
主函数设计如下,请勿修改:
int main(){
Time t1(2,34),t2,t3;
t2.SetTime(13,23,34);
cout<<"t1+t2:";
t3=t1+t2;//两个Time类对象相加
t3.print_24();
cout<<"\nt1+65:";
t3=t1+65;//Time类对象加上65秒
t3.print_24();
cout<<"\n65+t1:";
t3=65+t1;//65秒加上Time类对象
t3.print_24();
cout<<"\nt2-t1:";
t3=t2-t1;//两个Time类对象相减
t3.print_24();
cout<<"\nt1-70:";
t3=t1-70;//Time类对象减去70秒
t3.print_24();
return 0;
}
【样例输出】
t1+t2:15:57:34
t1+65:02:35:05
65+t1:02:35:05
t2-t1:10:49:34
t1-70:02:32:50
#include
#include
#include
using namespace std;
class Time
{
private:
int hour,minute,second;
public:
int SecCalc(){ return(hour*60+minute)*60+second; }//返回总秒数
Time(int h,int m,int s=0);//构造函数
Time(int s=0);//根据总秒数计算hour、minute、second并构造对象
void SetTime(int h=0,int m=0, int s=0);
void print_12();//按12小时格式显示时间
void print_24();//按24小时格式显示时间
//重载“+”运算符
//1. 两个对象相加:两种实现方法选一种
Time operator+(const Time & t) const;//成员函数
//friend Time operator+(const Time & t1, const Time & t2);//友元函数
//friend Time operator+(Time & t1, Time & t2);//友元函数
//2. 一个表示秒数的int型数据加上一个Time对象:只能用友元函数实现
friend Time operator+(int s, Time & t);//友元函数
//3. Time对象加上int型数据:两种实现方法选一种
Time operator+(int s);//成员函数
//friend Time operator+(Time & t, int s);//友元函数
//重载“-”运算符
//1. 两个Time对象进行相减:两种实现方法选一种
Time operator-(Time & t);//成员函数
//friend Time operator-(Time & t1, Time & t2);//友元函数
//2. Time对象减去一个表示秒数的int型数据:两种实现方法选一种
Time operator-(int s);//成员函数
//friend Time operator-(Time & t, int s);//友元函数
};
Time::Time(int h,int m,int s)//构造函数
{
hour = h; minute = m; second = s;
}
Time::Time(int s)//根据总秒数计算hour、minute、second并构造对象
{
hour = s/3600;
minute = (s-hour*3600)/60;
second = s-hour*3600-60*minute;
}
void Time::SetTime(int h,int m, int s)
{
hour = h; minute = m; second = s;
}
void Time::print_12()//按12小时格式显示时间
{
if(hour>12)
{
cout << setw(2) << setfill('0') << hour-12 << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << " PM";
}
else
{
cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << " AM";
}
}
void Time::print_24()//按24小时格式显示时间
{
cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second;
}
//重载“+”运算符
//1. 两个对象相加:两种实现方法选一种
Time Time::operator+(const Time & t) const//成员函数
{
//最普通的运算方法
Time tt;
tt.second = second+t.second;
tt.minute = tt.second/60 + minute + t.minute;
tt.second %= 60;
tt.hour = tt.minute/60 + hour + t.hour;
tt.minute %= 60;
tt.hour %= 24;
return tt;
}
/*
Time operator+(const Time & t1, const Time & t2)//友元函数
{
//最普通的运算方法
Time tt;
tt.second = t1.second+t2.second;
tt.minute = tt.second/60 + t1.minute + t2.minute;
tt.second %= 60;
tt.hour = tt.minute/60 + t1.hour + t2.hour;
tt.minute %= 60;
tt.hour %= 24;
return tt;
}
Time operator+(Time & t1, Time & t2)//友元函数
{
//利用提供的SecCalc()函数
int s = t1.SecCalc() + t2.SecCalc();
Time tt(s);
return tt;
}
*/
//2. 一个表示秒数的int型数据加上一个Time对象:只能用友元函数实现
Time operator+(int s, Time & t)//友元函数
{
s += t.SecCalc();
Time tt(s);
return tt;
}
/*
Time operator+(int s, Time & t)//友元函数
{
//利用秒数构造函数和前面刚定义的两个对象的加法
Time tt(s);
return tt+t;
}
*/
//3. Time对象加上int型数据:两种实现方法选一种
Time Time::operator+(int s)//成员函数
{
s += this->SecCalc();
Time tt(s);
return tt;
}
/*
Time operator+(Time & t, int s)//友元函数
{
s += t.SecCalc();
Time tt(s);
return tt;
}
*/
//重载“-”运算符
//1. 两个Time对象进行相减:两种实现方法选一种
Time Time::operator-(Time & t)//成员函数
{
int s = fabs( this->SecCalc() - t.SecCalc() );
Time tt(s);
return tt;
}
/*
Time operator-(Time & t1, Time & t2)//友元函数
{
int s = fabs( t1.SecCalc() - t2.SecCalc() );
Time tt(s);
return tt;
}
*/
//2. Time对象减去一个表示秒数的int型数据:两种实现方法选一种
Time Time::operator-(int s)//成员函数
{
s = fabs( this->SecCalc() - s );
Time tt(s);
return tt;
}
/*
Time operator-(Time & t, int s)//友元函数
{
s = fabs( s - t.SecCalc() );
Time tt(s);
return tt;
}
*/
int main()
{
Time t1(2,34),t2,t3;
t2.SetTime(13,23,34);
cout<<"t1+t2:";
t3=t1+t2;//两个Time类对象相加
t3.print_24();
cout<<"\nt1+65:";
t3=t1+65;//Time类对象加上65秒
t3.print_24();
cout<<"\n65+t1:";
t3=65+t1;//65秒加上Time类对象
t3.print_24();
cout<<"\nt2-t1:";
t3=t2-t1;//两个Time类对象相减
t3.print_24();
cout<<"\nt1-70:";
t3=t1-70;//Time类对象减去70秒
t3.print_24();
return 0;
}