【C++】函式名過載
阿新 • • 發佈:2018-11-21
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,如果可以,那麼就使用該函式。否則就會編譯報錯。