在程式設計時,有時我們要實現的是同一類的功能,只是有些細節不同。例如希望從3個數中找出其中的最大者,而每次求最大數時資料的型別不同,可能是3個整數、3個雙精度數或3個長整數。程式設計者往往會分別設計出3個不同名的函式,其函式原型為:
int max1(int a, int b, int c); //求3個整數中的最大者
double max2(double a, double b, double c); //求3個雙精度數中最大者
long max3(long a, long b, long c); //求3個長整數中的最大者
c++允許用同一函式名定義多個函式,這些函式的引數個數和引數型別不同。這就是函式的過載(function overloading)。即對乙個函式名重新賦予它新的含義,使乙個函式名可以多用。
對上面求最大數的問題可以編寫如下的c++程式。
【例4.5】求3個數中最大的數(分別考慮整數、雙精度數、長整數的情況)。
複製純文字新視窗
#include
using namespace std;
int main( )
int max(int a,int b,int c) //定義求3個整數中的最大者的函式
double max(double a,double b,double c)//定義求3個雙精度數中的最大者的函式
long max(long a,long b,long c) //定義求3個長整數中的最大者的函式
#include using namespace std;int main( )
double max(double a,double b,double c)//定義求3個雙精度數中的最大者的函式
long max(long a,long b,long c) //定義求3個長整數中的最大者的函式
運**況如下:
185-76567↙ (輸入3個整數)
56.87 90.23 -3214.78↙ (輸入3個實數)
67854 -912456 673456↙ (輸入3個長整數)
i_max=567 (輸出3個整數的最大值)
d_max=90.23 (輸出3個雙精度數的最大值)
g_max=673456 (輸出3個長整數的最大值)
上例3個max函式的函式體是相同的。
其實過載函式並不要求函式體相同;除了允許引數型別不同以外,還允許引數的個數不同。
【例4.6】編寫乙個程式,用來求兩個整數或3個整數中的最大數。如果輸入兩個整數,程式就輸出這兩個整數中的最大數,如果輸入3個整數,程式就輸出這3個整數中的最大數。
複製純文字新視窗
#include
using namespace std;
int main( )
int max(int a,int b,int c)//此max函式的作用是求3個整數中的最大者
int max(int a,int b)//此max函式的作用是求兩個整數中的最大者
#include using namespace std;int main( )
int max(int a,int b)//此max函式的作用是求兩個整數中的最大者
運**況如下:
max(a, b, c)=27
max(a, b)=8
兩次呼叫max函式的引數個數不同,系統就根據引數的個數找到與之匹配的函式並呼叫它。
引數的個數和型別可以都不同。但不能只有函式的型別不同而引數的個數和型別相同。例如:
int f(int); //函式返回值為整型
long f(int); //函式返回值為長整型
void f(int); //函式無返回值
在函式呼叫時都是同一形式,如「f(10)」。編譯系統無法判別應該呼叫哪乙個函式。過載函式的引數個數、引數型別或引數順序3者中必須至少有一種不同,函式返回值型別可以相同也可以不同。
在使用過載函式時,同名函式的功能應當相同或相近,不要用同一函式名去實現完全不相干的功能,雖然程式也能執行,但可讀性不好,使人莫名其妙。
mysql 函式過載 C 方法過載(函式過載)
在講解 c 構造方法 時提到定義構造方法時提到可以定義帶 0 到多個引數的構造方法,但構造方法的名稱必須是類名。實際上,這就是乙個典型的方法過載,即方法名稱相同 引數列表不同。引數列表不同主要體現在引數個數或引數的資料型別不同。在呼叫過載的方法時系統是根據所傳 遞引數的不同判斷呼叫的是哪個方法。例項...
C 函式 函式過載
如果同一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。void print const char cp void print const int beg,const int end void print const int ia,size t size 這些函式接受的形參型別不一樣,...
C 函式過載
函式過載 overloaded function 在相同的作用域中的兩個函式,如果有相同的名字而形參表不同 注意 如果僅僅函式的返回值不同是不能實現函式過載 void func int int func int error,僅僅返回值不同是不能作為函式過載,這屬於函式重定義 形參表包括 引數的型別 ...