int square(int number) { return number * number; } double square(double number) { return number * number; }這兩個函數之間的唯一區別是它們的返回值及其形參的資料型別。在這種情況下,編寫函數模板比過載函數更方便。函數模板允許程式設計師編寫一個單獨的函數定義,以處理許多不同的資料型別,而不必為每個使用的資料型別編寫單獨的函數。
template<class T> T square(T number) { return number * number; }函數模板由一個模板字首標記開始,該模板字首以關鍵字 template 開始,接下來是一組尖括號,裡面包含一個或多個在模板中使用的通用資料型別。通用資料型別以關鍵字 dass 開頭,後面跟著代表資料型別的形參名稱。
T square(T number)
其中,T 是型別形參或通用資料型別。該函數頭定義了一個 square 函數,它返回一個 T 型別的值,並使用了一個形參 number,這也是 T 型別的數位。
int y, x = 4;
y = square(x);
int square(int number) { return number * number; }但是,如果使用以下語句呼叫 square 函數:
double y, d = 6.2;
y = square(d);
double square(double number) { return number * number; }下面的程式演示了該函數模式的用法:
// This program uses a function template. #include <iostream> #include <iomanip> using namespace std; // Template definition for square function template <class T> T square(T number) { return number * number; } int main() { cout << setprecision(5); //Get an integer and compute its square cout << "Enter an integer: "; int iValue; cin >> iValue; // The compiler creates int square(int) at the first occurrence of a call to square with an int argument cout << "The square is " << square(iValue); // Get a double and compute its square cout << "nEnter a double: "; double dValue; cin >> dValue; // The compiler creates double square(double)at the first // occurrence of a call to square with a double argument cout << "The square is " << square (dValue) << endl; return 0; }程式輸出結果:
Enter an integer: 3
The square is 9
Enter a double: 8.3
The square is 68.89