当然,有时候你也想修改其中一个参数值。修改参数值的函数称为修改函数。
举个修改函数的例子:考虑这样一个函数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;
}
}
这种解决方案是正确的,但是不够高效。你能想到一个不需要迭代的解决方案吗?