1. 程式人生 > >【C++】函式名過載

【C++】函式名過載

C語言沒有函式名過載,C++有函式名過載。

函式名相同,函式引數列表不同,稱為函式名過載。函式引數列表不同包括:

1)引數個數不同;

2)引數型別不同;

#include "stdio.h"

double find_max(double a, double b, double c)
{
    double max = a;
    if(max < b)
    {
        max = b;
    }
    else if(max < c)
    {
        max = c;
    }
    return max;
}

int main()
{
    double a = find_max(1.1, 0.2, 3.3);
    printf("%f", a);

    return 0;
}

/*
//run out:
3.3000
*/

函式匹配步驟:

1)先根據函式名查詢

找到一個或多個同名函式(如果一個也沒有,就會編譯報錯)

2)按”型別“+”個數“匹配

第一種情況:找到一個完全匹配的函式,則呼叫該函式;

第二種情況:沒有找到完全匹配的函式,這時跳到第三步模糊匹配。

3)模糊匹配

這種情況比較複雜。(但一定是引數個數相同)

模糊匹配例項:2個整數值比大小,返回大的那個值。

#include "stdio.h"

double find_max(double a, double b, double c)
{
    double max = a;
    if(max < b)
    {
        max = b;
    }
    else if(max < c)
    {
        max = c;
    }
    return max;
}

double find_max(double a, double b)
{
    double max = a;
    if(max < b)
    {
        max = b;
    }
    return max;
}

int main()
{
    int a = 1;
    int b = 2;
    double result = find_max(a, b);
    printf("%f", result);

    return 0;
}

/*
//run out:
2.000000
*/

從上面的例項中可以看出,find_max並沒有找到完全匹配的函式,這時先比較引數個數,相同的作為候選,然後從候選中檢視傳入的a,b能否從int轉成double,如果可以,那麼就使用該函式。否則就會編譯報錯。