题意整理。

  • 给定一个Time类,包括小时、分钟两个成员变量。
  • 要求对Time类重载加号运算符。

方法一(运算符重载)

1.解题思路

  • 首先定义加号重载方法。
  • 然后计算对应时间相加的结果。分钟m范围为0-59,所以小时数的结果需要加上分钟数的进位,分钟数的结果需要对60取余。

图解展示: alt

2.代码实现

#include <iostream>
using namespace std;

class Time {

    public:
        int hours;      // 小时
        int minutes;    // 分钟

        Time() {
            hours = 0;
            minutes = 0;
        }

        Time(int h, int m) {
            this->hours = h;
            this->minutes = m;
        }

        void show() {
            cout << hours << " " << minutes << endl;
        }

        //定义加号重载方法......
        Time operator+(Time& t){
            //记录相加之后的时间
            Time time;
            //分钟m范围为0-59,所以小时数的结果需要加上分钟数的进位
            time.hours=hours+t.hours+(minutes+t.minutes)/60;
            //分钟数的结果需要对60取余
            time.minutes=(minutes+t.minutes)%60;
            return time;
        }

};

int main() {

    int h, m;
    cin >> h;
    cin >> m;

    Time t1(h, m);
    Time t2(2, 20);

    Time t3 = t1 + t2;
    t3.show();
    
    return 0;
}

3.复杂度分析

  • 时间复杂度:需要进行常数次操作,所以时间复杂度为O(1)O(1)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)