尝试在构造函数中超限时间



我有一个构造函数,我试图在其中超限时间。因此,如果用户输入 63 秒,则 60 秒将传递到分钟,因为一分钟内不可能有 63 秒。这就是我所拥有的。我需要评论部分的帮助。

Time::Time(int hours, int minutes, int seconds, int millis) {
        /*int add_millis = millis;
        minutes -= add_millis*60000 ;
        millis += add_millis;*/
        int add_seconds = millis / 1000;
        millis -= add_seconds * 1000;
        seconds += add_seconds;
        int add_minutes = seconds / 60;
        seconds -= add_minutes * 60;
        minutes += add_minutes;
        int add_hours = minutes / 60;
        minutes -= add_hours * 60;
        hours += add_hours;
        hours %= 24;

首先,你需要确定时间是否是一个"东西"。它似乎不在你的例子中。你想要的而不是对象是一个函数,它是你对"事物"执行的"动作"的更好表示。

您的构造函数似乎只对按值传递给它们的变量进行操作(即没有成员变量,没有引用),这让我们想到了第二点:您对参数所做的任何更改都只会在本地看到。您需要通过引用传递或以其他方式将它们存储在某个地方(即成员变量)。

第三:您希望将更改从较小的时间单位

级联到较大的时间单位,因此您只需包装一次更改。

考虑到这一点,您的函数作为函数实现,其中包含通过引用传递的参数:

#include <cassert>
void ValidateTime(int& hours, int& minutes, int& seconds, int& ms)
{
    assert(ms >= 0);
    assert(seconds >= 0);
    assert(minutes >= 0);
    assert(hours >= 0);
    int add_seconds = ms / 1000;
    ms %= 1000;
    seconds += add_seconds;
    int add_minutes = seconds / 60;
    seconds %= 60;
    minutes += add_minutes;
    int add_hours = minutes / 60;
    minutes %= 60;
    hours += add_hours;
    // TODO: exercise for the reader: roll your hours into days.
}

使用示例:

int main()
{
    int hours = 1;
    int minutes = 125;
    int seconds = 63;
    int ms = 54100;
    ValidateTime(hours, minutes, seconds, ms);
    std::cout << "hours: " << hours << ", minutes: " << minutes << ", seconds: " << seconds << ", ms: " << ms;
}

打印hours: 3, minutes: 6, seconds: 57, ms: 100

相关内容

  • 没有找到相关文章

最新更新