9.6 修改函数

当然,有时候你也想修改其中一个参数值。修改参数值的函数称为修改函数。

举个修改函数的例子:考虑这样一个函数increment,它给一个Time对象加上一定的秒数。此函数的草案代码如下:

void increment (Time& time, double secs) {
    time.second += secs;
    if (time.second >= 60.0) {
        time.second -= 60.0;
        time.minute += 1;
    }
    if (time.minute >= 60) {
        time.minute -= 60;
        time.hour += 1;
    }
}

第一行执行一条基本操作,余下代码处理特殊情况,我们以前也见过。

这个函数是正确的吗?如果参数secs的值比60大得多,会发生什么情况?那样的话,只减一次60是不够的;我们必须一直减下去,知道second的值小于60。我们可以用while语句替代if语句来实现之:

void increment (Time& time, double secs) {
    time.second += secs;
    while (time.second >= 60.0) {
        time.second -= 60.0;
        time.minute += 1;
    }
    while (time.minute >= 60) {
        time.minute -= 60;
        time.hour += 1;
    }
}

这种解决方案是正确的,但是不够高效。你能想到一个不需要迭代的解决方案吗?

文章导航