1. 程式人生 > >函式過載 和 模版template

函式過載 和 模版template

假設,需要設計一個從3個數中找最大值的函式,C語言中需要根據型別定義3個函式:

int max1(int a, int b, int c);
float max2(float a, float b, float c);
long max3(long a, long b, long c);

C語言規定在同一作用域中不能有同名的函式,因此3個函式名字不同,C++中用允許同一函式名定義多個函式,這些函式的引數個數和引數型別不同,實現不同功能。這就是函式過載,如:

int max(int a, int b, int c){}
float max(float a, float b, float c){}
long max(long a, long b, long c){}

         函式過載可以實現一個函式名多用,將實現相同的或類似功能的函式用同一個函式名來定義。但是,有個問題,就是在程式中依然需要分別定義每一個函式,例如定義了3個max函式,只是引數型別不同。為了解決這個問題,C++提供了函式模版(function template)。實際上就是建立一個通用的函式,其函式型別和形參型別不具體指定,用一個虛擬的型別來代表。

template <typename T>;
T max(T a, T b, T c)
{if(b > a) a = b;
 if(c > a) a = c;
 return a;
}
在函式定義時用T來定義變數a,b,c,顯然變數型別未確定。要等函式呼叫時根據實參的型別來確定T是什麼型別。其實也可以不用T而用任何一個識別符號,許多人習慣用T(Type)。可以看到,函式模版比函式過載更簡潔。但應該注意它只適用於函式的引數個數相同而型別不同,且函式體相同的情況下。