[C++/PTA] 时间相加

[C++/PTA] 时间相加

题目要求

设计一个时间类,用来保存时、分、秒等私有数据成员,通过重载操作符+实现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 对象。具体实现如下:

  1. 计算两个对象的秒数总和,并取模 60 得到新的秒数;
  2. 将两个对象的分钟数和计算出的新秒数相加,并除以 60 取余数得到新的分钟数;
  3. 将两个对象的小时数和计算出的新分钟数相加,并除以 60 得到新的小时数;
  4. 用计算结果更新第一个参数 t 的小时数、分钟数和秒数;
  5. 返回更新后的第一个参数 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";
}

总结

该题考察运算符重载的语法和规则如何在类中定义运算符以支持自定义类型的操作,读者可躬身实践。
我是秋说,我们下次见。

posted @ 2023-05-23 22:28  秋说  阅读(118)  评论(0编辑  收藏  举报  来源