C++ 试图在构造函数中超限时间

C++ 试图在构造函数中超限时间,c++,function,overrun,C++,Function,Overrun,我有一个构造函数,在其中我试图超限时间。因此,如果用户输入63秒,60秒将被传递到分钟,因为一分钟内不可能有63秒。这就是我所拥有的。我需要有关评论部分的帮助 Time::Time(int hours, int minutes, int seconds, int millis) { /*int add_millis = millis; minutes -= add_millis*60000 ; millis += add_millis;*/

我有一个构造函数,在其中我试图超限时间。因此,如果用户输入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.
}
#包括
void ValidateTime(整数和小时、整数和分钟、整数和秒、整数和毫秒)
{
断言(ms>=0);
断言(秒>=0);
断言(分钟>=0);
断言(小时数>=0);
int add_seconds=ms/1000;
ms%=1000;
秒数+=增加秒数;
int add_minutes=秒/60;
秒%=60;
分钟数+=增加分钟数;
整数加小时=分钟/60;
分钟%=60;
小时数+=增加小时数;
//待办事项:读者锻炼:把你的时间变成几天。
}
用法示例:

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;
}
intmain()
{
整小时=1;
整数分钟=125;
整数秒=63;
int-ms=54100;
验证时间(小时、分钟、秒、毫秒);

Std::C++中有一个模算符……我很熟悉,但是我认为在这种情况下它不太有帮助。你需要什么样的帮助?注释部分是否有一些输入没有被函数正确地处理?如果任何参数为负,您是否希望发生这种情况?时间对象的用途是什么?