编程语言导论/参数多态性
外观
< 编程语言导论
参数多态性是指当一个例程、类型或类定义由一个或多个类型参数化时发生的情况。它允许用户选择实际参数类型。这样,就可以定义泛型的类型或函数,可以使用类型变量来表示参数类型。下面的代码展示了在 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;
}