具有相同名稱但參數(shù)不同的兩個(gè)或多個(gè)函數(shù)稱為重載函數(shù)。在本文中,您將通過示例了解函數(shù)重載。
函數(shù)是指將代碼分組以執(zhí)行特定任務(wù)的代碼片段。
在C ++編程中,如果傳遞的參數(shù)的個(gè)數(shù)或類型不同,則兩個(gè)函數(shù)可以具有相同的名稱。
這些具有不同參數(shù)個(gè)數(shù)或類型(或兩者兼有)參數(shù)的函數(shù)稱為重載函數(shù)。例如:
int test() { } int test(int a) { } float test(double a) { } int test(int a, double b) { }
這里,所有4個(gè)函數(shù)都是重載函數(shù),因?yàn)閭鬟f給這些函數(shù)的參數(shù)不同。
注意,這4個(gè)函數(shù)的返回類型并不相同。重載函數(shù)可能有也可能沒有不同的返回類型,但是應(yīng)該有不同的參數(shù)。
// 錯(cuò)誤代碼 int test(int a) { } double test(int b){ }
即使返回類型不同,但是傳遞給這兩個(gè)函數(shù)的參數(shù)個(gè)數(shù)和數(shù)據(jù)類型都相同。因此,編譯器將拋出錯(cuò)誤。
#include <iostream> using namespace std; void display(int); void display(float); void display(int, float); int main() { int a = 5; float b = 5.5; display(a); display(b); display(a, b); return 0; } void display(int var) { cout << "整數(shù): " << var << endl; } void display(float var) { cout << "浮點(diǎn)數(shù): " << var << endl; } void display(int var1, float var2) { cout << "整數(shù): " << var1; cout << " 和浮點(diǎn)數(shù):" << var2; }
輸出結(jié)果
整數(shù): 5 浮點(diǎn)數(shù): 5.5 整數(shù): 5 和浮點(diǎn)數(shù):5.5
在這里,display()函數(shù)使用不同類型或數(shù)量的參數(shù)調(diào)用了三次。
所有這些函數(shù)的返回類型都是相同的,但這不是必需的。
//程序計(jì)算絕對(duì)值 //對(duì)整數(shù)和浮點(diǎn)數(shù)都有效 #include <iostream> using namespace std; int absolute(int); float absolute(float); int main() { int a = -5; float b = 5.5; cout << "數(shù)字 " << a << " 的絕對(duì)值= " << absolute(a) << endl; cout << "數(shù)字 " << b << " 的絕對(duì)值= " << absolute(b); return 0; } int absolute(int var) { if (var < 0) var = -var; return var; } float absolute(float var){ if (var < 0.0) var = -var; return var; }
輸出結(jié)果
數(shù)字 -5 的絕對(duì)值= 5 數(shù)字 5.5 的絕對(duì)值= 5.5
在上面的示例中,兩個(gè) absolute()函數(shù)被重載。
這兩個(gè)函數(shù)都采用單個(gè)參數(shù)。但是,一個(gè)函數(shù)將integer作為參數(shù),而另一個(gè)將float作為參數(shù)。
以int作為參數(shù)調(diào)用absolute()函數(shù)時(shí),調(diào)用此函數(shù):
int absolute(int var) { if (var < 0) var = -var; return var; }
以float作為參數(shù)調(diào)用absolute()函數(shù)時(shí),將調(diào)用此函數(shù):
float absolute(float var){ if (var < 0.0) var = -var; return var; }