函式的過載

2021-06-21 12:27:21 字數 1686 閱讀 8905

在程式設計時,有時我們要實現的是同一類的功能,只是有些細節不同。例如希望從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...