目錄
函式的過載
函式的過載是什麼?
函式過載的要求
函式過載舉例
函式的預設引數
函式的過載與函式的預設引數的區別
函式預設引數有何用處
由以上示例,我們要注意哪些事項呢?
函式的過載與函式的預設引數一起使用會發生什麼?
我們需要的函式一般要有普適性,就是對於一類問題有處理能力,比如:我想要找出兩個float變數的最大值,或者兩個int型變數的最大值。這種一種函式實現一類功能的情況就叫做函式的過載。
既然要使得乙個函式針對不同形參實現不同功能,那我們該如何正確的過載呢:
保證函式過載的形參不同,即引數的順序,引數的資料型別,引數的個數三者中至少有乙個是不同的才可以。
大家又說「為什麼僅函式返回值不同不行呢?」
函式一般可以通過指標與引用來修改傳入引數的值,因此函式有時可不需要返回值,那麼函式的返回值型別已不是函式過載的重要條件。
#include using namespace std;
// 函式通過形參的位址改變形參,無需返回值
int get_max_min(int x, int y, int *z)
float get_max_min(float x, float y, float *z)
int main()
相同點:
函式的過載與函式的預設引數都可以實現函式對於一類問題的處理,因此兩者不可同時對同一函式使用,這樣的話系統執行時會報錯。
不同點:
① 函式的過載可以使得同名函式根據不同形參個數,不同形參順序,不同形參型別實現不同功能,而函式的預設引數僅可以使函式根據不同形參個數實現不同功能;
② 函式的過載是在編寫多個重名函式,而函式的預設引數是在乙個函式內實現的。
我想要實現乙個函式可以根據輸入變數來輸出陣列內的最大值 或 最小值 或 最大值和最小值,如下示例:
① 輸出陣列內的最大值與最小值
#include using namespace std;
void get_min_max(int *num, int length, int *num_max, int *num_min)
int max_num = 0, min_num = 0, i = 0;
for (; i
if (min_num > num[i])
} if (num_max != null)
if (num_min != null)
}
int main()
; get_min_max(iarray, 10, &max_num, &min_num);
cout <
}
② 僅輸出陣列的最小值
#include using namespace std;
// 採用預設引數,新增預設引數的形參一定單獨要在最後一部分,不可以和無缺省引數的形參混合宣告
void get_min_max(int *num, int length, int *num_max = null, int *num_min = null)
int max_num = 0, min_num = 0, i = 0;
for (; i
if (min_num > num[i])
} if (num_max != null)
if (num_min != null)
}
int main()
; get_min_max(iarray, 10, null, &min_num); // 由於null在中間,因此不可以省略不寫
cout <
}
③ 僅輸出最大值
#include using namespace std;
// 採用預設引數,新增預設引數的形參一定單獨要在最後一部分,不可以和無缺省引數的形參混合宣告
void get_min_max(int *num, int length, int *num_max = null, int *num_min = null)
int max_num = 0, min_num = 0, i = 0;
for (; i
if (min_num > num[i])
} if (num_max != null)
if (num_min != null)
}
int main()
; get_min_max(iarray, 10, &max_num); // 由於後面為null,故省略不寫
cout <
}
① 有預設引數的形參一定要單獨寫一塊,在函式的形參中先寫不帶預設引數的形參,再寫帶預設引數的形參;
② 過載和預設引數不可對同一函式使用,否則會發生錯誤;
③ 從函式編譯實現角度而言,過載是在函式體外部實現的,預設引數是在函式體內部實現的,因此預設引數比重載要複雜一些。
#include using namespace std;
// 採用預設引數,新增預設引數的形參一定單獨要在最後一部分,不可以和無缺省引數的形參混合宣告
void get_min_max(int *num, int length, int *num_max = null, int *num_min = null)
int max_num = 0, min_num = 0, i = 0;
for (; i
if (min_num > num[i])
} if (num_max != null)
if (num_min != null)
}
void get_min_max(int *num, int length) // 函式過載
int main()
; get_min_max(iarray, 10, &max_num);
cout <
get_min_max(iarray, 10); // 含有兩個引數的函式呼叫
}
輸出結果:
我們從結果中可以看出:
系統區分不了含有兩個引數的函式應該執行哪乙個,系統直接懵了。
預設引數與函式過載
預設引數是 宣告或定義函式時為函式的 引數指定乙個預設值。在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。void testfunc int a 0 注意 如果生命與定義位置同時出現,恰巧兩個位置提供的值不同,那編譯器就無法確定到底該用那個預設值。3.預設值必須是常量或者全域性變...
預設引數與函式過載
一.預設引數 形參a和b都帶有預設值 使用者用掉該函式時,沒傳參,就用預設值。傳參就用所傳值。1,分類 1.全預設引數 每個引數都帶有預設值 void t int a 1,int b 2,int c 3 int t 不能過載,引數列表相同,不能過載。注意 如果兩個函式僅僅是返回型別不同,則不能構過載...
c 函式過載與預設引數
函式過載 是指同一作用域內,一組具有相同函式名,不同引數列表的函式,構成過載關係,這組名稱相同的函式成為過載函式。過載函式通常完成的功能相近,這樣做的好處是減少了函式名的數量,提高了程式的可讀性。注意 過載與函式的返回型別無關,引數相同僅返回值不同的兩個函式不構成過載關係,與形參名字無關,只與引數的...