時間類的改進(運算子過載)
阿新 • • 發佈:2019-01-04
【問題描述】
對前面實驗寫過的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 <iostream>
#include <iomanip>
#include <math.h>
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;
}