加载中...

9.6 修改函数


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

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

  1. void increment (Time& time, double secs) {
  2. time.second += secs;
  3. if (time.second >= 60.0) {
  4. time.second -= 60.0;
  5. time.minute += 1;
  6. }
  7. if (time.minute >= 60) {
  8. time.minute -= 60;
  9. time.hour += 1;
  10. }
  11. }

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

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

  1. void increment (Time& time, double secs) {
  2. time.second += secs;
  3. while (time.second >= 60.0) {
  4. time.second -= 60.0;
  5. time.minute += 1;
  6. }
  7. while (time.minute >= 60) {
  8. time.minute -= 60;
  9. time.hour += 1;
  10. }
  11. }

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


还没有评论.