21xrx.com
2024-12-23 00:50:39 Monday
登录
文章检索 我的文章 写文章
C++ 实现时间类的设计
2023-06-28 02:49:32 深夜i     --     --
C++ 时间类 设计

在许多应用程序中,时间类的实现是必不可少的。C++ 中,我们可以使用类来定义时间,并重载运算符来进行时间的比较和计算。以下是一个示例时间类的设计。

首先,我们需要定义一个时间类,用于存储小时、分钟和秒。时间类应该具有默认构造函数和带参数构造函数,以便在创建对象时初始化时间。此外,我们应该定义函数来获取和设置小时、分钟和秒。


class Time {

  private:

    int hour;

    int minute;

    int second;

  public:

    Time();

    Time(int h, int m, int s);

    void setHour(int h);

    void setMinute(int m);

    void setSecond(int s);

    int getHour();

    int getMinute();

    int getSecond();

};

接下来,我们需要定义一些运算符来比较和计算时间。以下是常见的运算符:

- 等于(==):比较两个时间是否相等

- 大于(>):比较两个时间的大小

- 小于(<):比较两个时间的大小

- 加(+):将两个时间相加,返回一个新的时间

- 减(-):将两个时间相减,返回一个新的时间

在运算符重载函数中,我们应该对这些运算符进行适当的处理。例如,比较运算符应该比较每个时间值,如果它们相等,则返回 true,否则返回 false。加法和减法运算符应该将小时、分钟和秒分别相加或相减,并返回一个新的时间对象。


bool operator ==(const Time& t1, const Time& t2) {

  return (t1.getHour() == t2.getHour() && t1.getMinute() == t2.getMinute() && t1.getSecond() == t2.getSecond());

}

bool operator >(const Time& t1, const Time& t2) {

  if (t1.getHour() > t2.getHour())

    return true;

   else if (t1.getHour() == t2.getHour() && t1.getMinute() > t2.getMinute())

    return true;

   else if (t1.getHour() == t2.getHour() && t1.getMinute() == t2.getMinute() && t1.getSecond() > t2.getSecond())

    return true;

   else

    return false;

  

}

bool operator <(const Time& t1, const Time& t2) {

  if (t1.getHour() < t2.getHour())

    return true;

   else if (t1.getHour() == t2.getHour() && t1.getMinute() < t2.getMinute())

    return true;

   else if (t1.getHour() == t2.getHour() && t1.getMinute() == t2.getMinute() && t1.getSecond() < t2.getSecond())

    return true;

   else

    return false;

  

}

Time operator +(const Time& t1, const Time& t2) {

  int h = t1.getHour() + t2.getHour();

  int m = t1.getMinute() + t2.getMinute();

  int s = t1.getSecond() + t2.getSecond();

  if (s >= 60) {

    m += s / 60;

    s %= 60;

  }

  if (m >= 60) {

    h += m / 60;

    m %= 60;

  }

  h %= 24;

  return Time(h, m, s);

}

Time operator -(const Time& t1, const Time& t2) {

  int h = t1.getHour() - t2.getHour();

  int m = t1.getMinute() - t2.getMinute();

  int s = t1.getSecond() - t2.getSecond();

  if (s < 0) {

    m--;

    s += 60;

  }

  if (m < 0) {

    h--;

    m += 60;

  }

  h += 24;

  h %= 24;

  return Time(h, m, s);

}

最后,我们应该实现一个可以打印时间的函数。这个函数将小时、分钟和秒转换为字符串,并返回它们的组合。


std::string toString(const Time& t) {

  std::string h = std::to_string(t.getHour());

  std::string m = std::to_string(t.getMinute());

  std::string s = std::to_string(t.getSecond());

  if (h.length() < 2) {

    h = "0" + h;

  }

  if (m.length() < 2) {

    m = "0" + m;

  }

  if (s.length() < 2) {

    s = "0" + s;

  }

  return h + ":" + m + ":" + s;

}

通过定义这些函数,我们可以创建一个完整的时间类。我们可以使用以下方式来使用它:


int main() {

  Time t1(10, 30, 45);

  Time t2(17, 15, 20);

  Time t3 = t1 + t2;

  Time t4 = t2 - t1;

  std::cout << "Time 1: " << toString(t1) << std::endl;

  std::cout << "Time 2: " << toString(t2) << std::endl;

  std::cout << "Time 3: " << toString(t3) << std::endl;

  std::cout << "Time 4: " << toString(t4) << std::endl;

  if (t1 < t2)

    std::cout << "Time 1 is less than Time 2" << std::endl;

   else

    std::cout << "Time 1 is not less than Time 2" << std::endl;

  

  return 0;

}

在这个例子中,我们创建了两个时间对象 t1 和 t2,然后将它们相加和相减,创建了两个新的时间对象 t3 和 t4。我们还使用 toString 函数将这些时间转换为字符串,并使用比较运算符比较了它们的大小。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复