题目要求
设计一个时间类,用来保存时、分、秒等私有数据成员,通过重载操作符+
实现2个时间的相加。
要求:
(1)小时的时间范围限制在大于等于0;(2)分的时间范围为0-59分;(3)秒的时间范围为0-59秒。
#include <iostream> using namespace std; class Time { private: int hours,minutes, seconds; public: Time(int h=0, int m=0, int s=0); Time operator + (Time &); void DispTime(); }; /* 请在这里填写答案 */ int main() { Time tm1(8,75,50),tm2(0,6,16), tm3; tm3=tm1+tm2; tm3.DispTime(); return 0; }
在这里给出相应的输出。例如:
9h:22m:6s
解题思路
实现构造函数Time(int h, int m, int s)
和重载的加法运算符 operator+
,以及输出时间的方法 DispTime()
。
在构造函数中,使用传入的参数初始化 Time
对象的小时数、分钟数和秒数。
在 operator+
方法中,将两个 Time
对象进行相加操作,并返回一个新的 Time
对象。具体实现如下:
- 计算两个对象的秒数总和,并取模 60 得到新的秒数;
- 将两个对象的分钟数和计算出的新秒数相加,并除以 60 取余数得到新的分钟数;
- 将两个对象的小时数和计算出的新分钟数相加,并除以 60 得到新的小时数;
- 用计算结果更新第一个参数
t
的小时数、分钟数和秒数; - 返回更新后的第一个参数
t
。
在 DispTime()
方法中,输出调用该方法的 Time
对象的小时数、分钟数和秒数。
代码
Time::Time(int h, int m, int s):hours(h),minutes(m),seconds(s){} Time Time::operator+(Time& t) { int s = (t.seconds + this->seconds) % 60; int m = ((t.seconds + this->seconds) / 60 + t.minutes + this->minutes) % 60; int h = ((t.seconds + this->seconds) / 60 + t.minutes + this->minutes) / 60 + t.hours + this->hours; t.hours = h; t.minutes = m; t.seconds = s; return t; } void Time::DispTime() { cout << this->hours << "h:" << this->minutes << "m:" << this->seconds << "s"; }
总结
该题考察运算符重载的语法和规则
及如何在类中定义运算符以支持自定义类型的操作
,读者可躬身实践。
我是秋说,我们下次见。