类与对象应用相关问题

在 MyTime 类中增加 1 个公有成员函数 getTimeSpan,计算 2 个时间之间的
时间差,返回结果也是一个 MyTime 对象。
此外为类增加 1 个构造函数,通过传递 1 个参数(时间的总分钟数)来构造
时间对象。将 output、getHour、getMinute、getTotalMinutes 定义为常成员函数。

class MyTime{
public:
  MyTime();
  MyTime(int h,int m); //通过指定 h 和 m 构造 MyTime 对象
  MyTime( int minutes); //通过指定分钟数构造 MyTime 对象
  void setTime(int h, int m); //设置新的时间
  void output() const; //以 hh:mm 格式输出时间
  int getHour() const; //获得小时
  int getMinute() const; //获得分钟
  int getTotalMinutes() const; //获得从 0 点 0 分起的总分钟数
  MyTime getTimeSpan( const MyTime &t )const; //计算时间差
private:
  int hour;
  int minute;
  void normalizeTime(); //规范化小时为 0~23,分钟为 0~59
};

int main(){
MyTime t1(9,20),t2(11,35),t3;
t3=t1.getTimeSpan(t2);
t3.output();
return 0;
}

【提示】计算时间差,可先计算出 2 个时间的总分钟数,得到分钟数差值,
再根据分钟数构造 1 个 MyTime 对象并返回。

#include <iostream>
#include <iomanip>

using namespace std;

class MyTime
{
public:
    MyTime()
        : hour(0),
          minute(0)
    {
    }

    MyTime(int h, int m)
        : hour(h),
          minute(m)
    {
    }

    MyTime(int minutes)
        : hour(minutes / 60),
          minute(minutes % 60)
    {
    }

    void setTime(int h, int m)
    {
        hour = h;
        minute = m;
    }

    void output() const
    {
        cout << setfill('0') << setw(2) << hour << ":" << setw(2) << minute << endl;
    }

    int getHour() const { return hour; }
    int getMinute() const { return minute; }
    int getTotalMinutes() const { return hour * 60 + minute; }

    MyTime getTimeSpan(const MyTime &t) const
    {
        return { t.getTotalMinutes() - getTotalMinutes() };
    }

private:
    int hour;
    int minute;
};

int main()
{
    MyTime t1(9, 20), t2(11, 35);
    MyTime t3 = t1.getTimeSpan(t2);
    t3.output();
    return 0;
}