我有一个构造函数,我试图超时。因此,如果用户输入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;
答案 0 :(得分:0)
首先,您需要确定时间是否是“事物”。它似乎不在你的例子中。您想要的而不是对象是一个函数,它更好地表示您对“事物”执行的“操作”。
您的构造函数似乎只对按值传递给它们的变量(即没有成员变量,没有引用)进行操作,这将我们带到第二点:您对参数所做的任何更改都只能在本地看到。您需要通过引用传递或以其他方式将它们存储在某处(即成员变量)。
第三:您希望将更改从较小的时间段级联到较大的时间段,因此您只需将它们包装一次。
考虑到这一点,您的功能实现为一个函数,参数通过引用传递:
#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