试图在构造函数中超时

Posted

技术标签:

【中文标题】试图在构造函数中超时【英文标题】:Trying to overrun time in a constructor 【发布时间】:2018-03-26 21:36:09 【问题描述】:

我有一个构造函数,我试图在其中超时。因此,如果用户输入 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;

【问题讨论】:

C++中有一个取模运算符...... 我对此很熟悉,但我认为它在这种情况下没有帮助。 注释掉的部分需要什么样的帮助?是否有一些输入没有被函数正确处理? 在评论部分完全不清楚您要做什么。顺便说一句,如果任何参数为负数,您预计会发生什么? Time 对象的用途是什么? 【参考方案1】:

首先,您需要确定时间是否是“事物”。您的示例中似乎没有。您想要的不是对象而是函数,它可以更好地表示您对“事物”执行的“动作”。

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

第三:您希望将更改从较小的时间单位级联到较大的时间单位,因此您只需将每个更改包装一次。

考虑到这一点,您的功能实现为具有通过引用传递参数的函数:

#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

【讨论】:

以上是关于试图在构造函数中超时的主要内容,如果未能解决你的问题,请参考以下文章

试图重载和运算符“+”但找不到正确的类构造函数

为啥通过构造函数返回对象时没有临时对象?

将构造函数值从子类传递到超类c++ [重复]

为啥这段代码试图调用复制构造函数?

Java 私有构造函数可见性

Angular4在构造函数中调用一个函数