C++入門教程(14):過載函式

小古銀發表於2019-05-11

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


在前面程式碼中,int myabs(int num);,可以看到引數是int,返回值也是int,那麼,當傳入浮點型或者長整型時,就會像上面說的引數賦值的步驟進行。換句話說,如果傳入其他int儲存不了的引數時,那麼它就不舉了。這種情況就需要新的函式用來處理其它型別,由於其它新函式也是用來求絕對值的,所以也用myabs作為函式名稱,就是為了讓函式名稱更清晰方便地表達出它的意思,而引數改成各種的型別。

上面所說的,如果一堆函式是同一個名字但有不同的形式引數,那麼這堆函式就是過載函式

注意:過載函式只跟函式形式引數的數量還有資料型別有關,跟引數名沒有關係,跟返回值也沒有關係。

基礎示例

以下給出完整栗子:

#include <iostream>

int myabs(int num);
float myabs(float num);
double myabs(double num);
long long myabs(long long num);

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

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

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

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

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

輸出結果:

1024
10.24
2.1456

上面寫的也只是一部分,如果想要所有型別都適用,就要都寫一遍,ヽ(✿゚▽゚)ノ驚不驚喜,意不意外。不過還是有方法不用寫這麼多的,就是這個教程很後面教的——模板

基礎講解

當你編譯的時候,編譯器會分析出你給函式提供了什麼型別的引數,然後根據這個資料型別去找符合這個型別的函式,然後就用這個函式呼叫你指定的引數。如果編譯器找不到對應的函式,就嘗試找最接近的型別,然後(隱式)轉換一下引數變成這個接近的型別,如果也都沒有就會編譯報錯。

溫馨提示:一般IDE還是非常智慧的,當你用滑鼠指著你呼叫的函式時,IDE會顯示出來呼叫的是哪個函式。

相關文章