C++入門--函式過載
阿新 • • 發佈:2020-10-14
舉例:實現比較兩個數的大小
#include <iostream> #include <string> using namespace std; #define GETMAX(a, b) ((a) > (b)) ? (a) : (b); inline int getMax(int a, int b) { return ((a) > (b)) ? (a) : (b); } int main(int argc, char const* argv[]) { int n = getMax(1, 2); int n1 = GETMAX(1, 2);char* p = nullptr; char* q = nullptr; char* m = GETMAX(p, q); return 0; }
使用巨集,雖然可以實現忽略傳入的資料型別,但是不安全
使用(內聯)函式,雖然更安全,但是由於有型別檢查而擴充套件性不好
在C++中允許出現同名的函式--函式過載
條件(函式要素:函式名、函式引數、函式返回值、函式的呼叫約定):
1.函式名必須相同
2.函式引數個數不同,型別不同,型別順序不同
3.函式的返回值,呼叫約定不做考慮
4.作用域相同
函式過載的呼叫規則
1.根據函式名找對應的函式,作為候選函式
1.1如果候選函式個數為0,則報為定義錯誤(找不到識別符號)
2.候選函式個數>0,從候選中找匹配的函式(完全匹配,可以轉換的匹配【char <-->int】【float<-->double】【float<-->int】)
2.1如果匹配的函式個數 == 0,則錯誤(隱式轉換失敗)
2.2如果匹配個數>0,找匹配最佳
3.最佳匹配個數 = 1,就呼叫該函式
最佳匹配個數 > 1,就會報二義性