codecamp

C++ 修改函数

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

举个修改函数的例子:考虑这样一个函数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;
    }
}

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

C++ const参数
C++ 填充函数
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }