程式語言導論/引數多型性
外觀
< 程式語言導論
引數多型性是指當一個例程、型別或類定義由一個或多個型別引數化時發生的情況。它允許使用者選擇實際引數型別。這樣,就可以定義泛型的型別或函式,可以使用型別變數來表示引數型別。下面的程式碼展示了在 C++ 中實現引數多型性的方式,即使用 模板。
#include <iostream>
template <class T>
T GetMax (T a, T b) {
T result;
result = (a > b) ? a : b;
return (result);
}
int main() {
int i = 5, j = 6, k;
long l = 10, m = 5, n;
k = GetMax<int>(i, j); // type parameter: int
n = GetMax<long>(l, m); // type parameter: long
std::cout << k << std::endl;
std::cout << n << std::endl;
return 0;
}
上面的原始碼定義了一個名為 GetMax 的多型函式(第 3 到 8 行)。在 GetMax 範圍內定義的型別變數 T 是一種泛型,它將在函式呼叫時被替換。該函式接受兩個引數 (a 和 b),並返回一個型別為 T 的值。執行時 a 和 b 的值會被比較,最大的值將被函式返回。主函式展示了對 GetMax 函式的兩個呼叫。在第 13 行,函式呼叫使用 int 型別,而在第 14 行,它使用 long 型別。在 GetMax 函式呼叫中,引數的內容使用 ">" 運算子進行比較。為了使用此函式,必須為變數型別實現此運算子。以下程式碼展示了在類 MyInt 中過載運算子 ">" 的實現,以便可以將 GetMax 應用於它。主函式展示了它的使用。
#include <iostream>
class MyInt {
friend std::ostream & operator<<(std::ostream& os, const MyInt& m) {
os << m.data;
}
friend bool operator >(MyInt& mi1, MyInt& mi2) {
return mi1.data > mi2.data;
}
public:
MyInt(int i) : data(i) {}
private:
const int data;
};
template <class T>
T GetMax (T a, T b) {
return (a > b) ? a : b;
}
int main () {
MyInt m1(50), m2(56);
MyInt mi = GetMax<MyInt>(m1, m2);
std::cout << mi << std::endl;
return 0;
}