运算符重载
关于运算符重载 Time类进行修改,通过重载“+”、“-”运算符直接进行时间的加减运算。
提示:
(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<<"\nt1+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<<"\nt1-t2:";
t3=t1-t2; //两个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
t1-t2:10:49:34
t1-70:02:32:50
这是我的代码 怎么改呢??
#include<iostream>
#include<iomanip>
using namespace std ;
class Time
{
int hour , minute , second ;
public:
int SecCalc()
{
return ( hour * 60 + minute ) * 60 + second ;
}
Time( int h = 0 , int m = 0 , int s = 0 ) ;
void SetTime( int h = 0 , int m = 0 , int s = 0 ) ;
void print_12() ;
void print_24() ;
friend Time Add( Time& , Time& ) ;
friend Time Add( Time& , int & ) ;
friend Time Add( int & , Time& ) ;
friend Time Sub( Time& , Time& ) ;
friend Time Sub( Time& , int &) ;
friend Time Sub( int & , Time& ) ;
} ;
Time::Time( int h , int m , int s )
{
hour = h ;
minute = m ;
second = s ;
}
void Time::SetTime( int h , int m , int s )
{
hour = h ;
minute = m ;
second = s ;
}
void Time::print_12()
{
if( hour >= 0 && hour <= 11 )
{
cout << setfill('0') ;
cout << setw(2) << hour << ":" << minute << ":" << second << " AM" ;
}
else
{
cout << setfill('0') ;
cout << setw(2) << hour - 12 << ":" << minute << ":" << second << " PM" ;
}
}
void Time::print_24()
{
cout << setfill('0') ;
cout << setw(2) << hour << ":" << minute << ":" << second ;
}
Time Add( Time & t1 , Time & t2 )
{
int temp = ( t1.hour*3600 + t1.minute*60 + t1.second ) + ( t1.hour*3600 + t1.minute*60 + t1.second ) ;
t1.hour = temp / 3600 ;
t1.minute = (temp % 3600 ) / 60 ;
t1.second = temp % 3600 % 60 ;
return *t1 ;
}
Time Sub( Time & t1 , Time & t2 )
{
int temp = ( hour*3600 + minute*60 + second ) - ( t2.hour*3600 + t2.minute*60 + t2.second ) ;
if( temp < 0 )
temp = - temp ;
t1.hour = temp / 3600 ;
t1.minute = (temp % 3600 ) / 60 ;
t1.second = temp % 3600 % 60 ;
return *t1 ;
}