在程式設計時,有時我們要實現的是同一類的功能,只是有些細節不同。例如希望從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個長整數中的最大者的函式
運**況如下:
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函式的作用是求兩個整數中的最大者
運**況如下:
max(a,b,c)=27
max(a,b)=8
兩次呼叫max函式的引數個數不同,系統就根據引數的個數找到與之匹配的函式並呼叫它。
引數的個數和型別可以都不同。但不能只有函式的型別不同而引數的個數和型別相同。
例如:int f(int); //函式返回值為整型
long f(int);//函式返回值為長整型
void f(int);//函式無返回值
在函式呼叫時都是同一形式,如「f(10)」。編譯系統無法判別應該呼叫哪乙個函式。過載函式的引數個數、引數型別或引數順序3者中必須至少有一種不同,函式返回值型別可以相同也可以不同。
在使用過載函式時,同名函式的功能應當相同或相近,不要用同一函式名去實現完全不相干的功能,雖然程式也能執行,但可讀性不好,使人莫名其妙。
函式的過載
在面向過程的程式設計模式下,程式被劃分為資料結構 函式,這也就是那句著名的 程式 資料結構 演算法 的由來 在面向過程的思考方式下,函式名就是最好的標識,而名稱組織良好的函式集合是判斷 是否優美的乙個重要因素 在物件導向的思考方式下,一切都不同了 常見的情況下,應該為不同的函式起不同的名字,但是當這...
函式的過載
函式的過載即對乙個函式名重新賦予它新的含義,使乙個函式名可以多用,即一物多用。求3個數中的最大數 includeusing namespace std int max int a,int b,int c long max long a,long b,long c double max double ...
函式的過載
在實際開發中,有時候我們需要實現幾個功能類似的函式,只是有些細節不同。例如希望交換兩個變數的值,這兩個變數有多種型別,可以是 int float char bool 等,我們需要通過引數把變數的位址傳入函式內部。在 c語言中,程式設計師往往需要分別設計出三個不同名的函式,其函式原型與下面類似 voi...