11.2 计算时间:一个运算符重载示例
如果今天早上在 Priggs的账户上花费了2小时 35 分钟,下午又花费了2小时40分钟,
则总共花了多少时间呢 ? 这个示例与加法概念很吻合,但要相加的单位(小时与分
钟的混合)与内置类型不匹配。第7章通过定义一个 travel time 结构和将这种
结构相加的 sum()函数来处理类似的情况。现在将其推广,采用一个使用方法来
处理加法的 Time 类。首先使用一个名为Sum()的常规方法,然后介绍如何将其
转换为重载运算符。程序清单11.1列出了这个类的声明。
//mytime0.h--Time class before operator overloading
#ifndef MYTIME0_H_
#define MYTIME0_H_
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h, int m = 0);
void AddMin(int m);
void AddHr(int h);
void Reset(int h = 0,int m = 0);
Time Sum(const Time& t)const;
void Show()const;
};
#endif // !MYTIME0_H_
行为的实现
//mytime0.cpp -- implementing Time methods
#include<iostream>
#include"mytime0.h"
Time::Time()
{
hours = minutes = 0;
}
Time::Time(int h, int m)
{
hours = h;
minutes = m;
}
void Time::AddHr(int m)
{
minutes += m;
hours += minutes / 60;
minutes %= 60;
}
void Time::AddHr(int h)
{
hours += h;
}
void Time::Reset(int h, int m)
{
hours = h;
minutes = m;
}
Time Time::Sum(const Time& t)const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
void Time::Show()const
{
std::cout << hours << "hours," << minutes << " minutes";
}
测试函数
#include <iostream>
#include"mytime0.h"
int main()
{
using std::cout;
using std::endl;
Time planing;
Time coding(2, 40);
Time fixing(20, 55);
Time total;
cout << "Planing time = ";
planing.Show();
cout << endl;
cout << "coding time = ";
coding.Show();
cout << endl;
cout << "fixing time = ";
fixing.Show();
cout << endl;
total = coding.Sum(fixing);
cout << "coding.sum(fixing)= ";
total.Show();
cout << endl;
return 0;
}
代码copy成功,下篇文章继续分析
C++PrimerPlus第十一章类的使用:运算符重载示例0002