跳转到内容

编程语言导论/参数多态性

来自维基教科书,开放的书籍,为开放的世界

参数多态性

[编辑 | 编辑源代码]

参数多态性是指当一个例程、类型或类定义由一个或多个类型参数化时发生的情况。它允许用户选择实际参数类型。这样,就可以定义泛型的类型或函数,可以使用类型变量来表示参数类型。下面的代码展示了在 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 是一种泛型,它将在函数调用时被替换。该函数接受两个参数 (ab),并返回一个类型为 T 的值。运行时 ab 的值会被比较,最大的值将被函数返回。主函数展示了对 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;
}

强制转换 · 子类型多态性

华夏公益教科书