C++入門教程(12):定義函數

小古銀的官方網站(完整教程):http://www.xiaoguyin.com/
C++入門教程視頻:https://www.bilibili.com/vide...ios


既然用過std::abs()函數,那麼,如今就以它爲例,實現一個myabs()函數來實現求絕對值。ide

返回值類型 函數名稱(參數類型 參數名稱, 參數類型 參數名稱)
{
    函數的內容
}

基礎示例

根據這個格式實現myabs()函數:函數

#include <iostream>

int myabs(int num)
{
    int value = 0;
    if (num < 0)
    {
        value = -num;
    }
    else
    {
        value = num;
    }
    return value;
}

int main(void)
{
    std::cout << myabs(-1024) << std::endl;
    std::cout << myabs(2333) << std::endl;
    std::cout << myabs(6666) << std::endl;
    return 0;
}

輸出結果:網站

1024
2333
6666

基礎講解

先看一下調用myabs()的時候跟調用std::abs()函數時是同樣的。設計

而後再看看定義:code

int myabs(int num)
{
    int value = 0;
    if (num < 0)
    {
        value = -num;
    }
    else
    {
        value = num;
    }
    return value;
}

myabs是函數的名稱,myabs前面是返回值的類型,後面括號內是函數的參數,num是須要轉成絕對值的值,它只接受int類型,因此調用就能夠這樣:視頻

int absnum = myabs(-100);

上面代碼中,函數參數num叫作形式參數;而傳進去的參數-100叫作實際參數教程

形式參數其實是一個局部變量,它的做用域就是在myabs()函數內。假設傳入一個數值,上面代碼函數的形式參數的行爲是:int num = 100;,而後執行函數內的代碼;假設傳入一個變量value,那麼形式參數的行爲就是:int num = value;。也就是說,當有參數傳入函數時,傳入參數的行爲就是一個賦值行爲。因此,若是一個參數佔用內存比較大,那就會致使大量數據被複制。內存

如下代碼判斷,若是num小於0就給它一個負號讓它變成正數,而後再賦值給value;若是num非負則直接賦值給value作用域

int value = 0;
if (num < 0)
{
    value = -num;
}
else
{
    value = num;
}

而後,myabs()函數返回計算結果,也就是變量value

return value;

固然啦,爲了方便分析我作了一些拆分,實際上,myabs()函數能夠簡寫成這樣:

int myabs(int num)
{
    if (num < 0)
    {
        return -num;
    }
    else
    {
        return num;
    }
}

由於newnumint類型,因此返回值我就決定是int類型了。若是你以爲返回值確定是非負的,那麼你也是對的。因此,myabs()函數也能夠寫成這樣:

unsigned int myabs(int num)
{
    if (num < 0)
    {
        return -num;
    }
    else
    {
        return num;
    }
}

再放一個含有多個參數的函數的栗子:

#include <iostream>

int add(int a, int b)
{
    return a + b;
}

int main(void)
{
    std::cout << add(-5, 100) << std::endl;
    return 0;
}

固然啦,單純地相加就不必寫成函數了。

補充知識

在C++11前,爲了減小函數返回值的額外開銷,通常將非基本數據類型的類型(例如std::string)經過參數來返回。C++11開始,返回值直接返回不會帶來額外的開銷。由於返回變量時,編譯器並不會銷燬局部變量的內存並且還會將內存地址直接傳遞給保存返回值的變量。因爲這個轉變,使C++設計出來的函數更加直觀地表達出其意義。而這個機制就叫作完美轉發

相關文章
相關標籤/搜索