模板函数

写一个max,求两个东西中较大的一个。

   1 int max(int a, int b) {
   2     return a>b?a:b;
   3 }
   4 
   5 double max(double a, double b) {
   6     return a>b?a:b;
   7 }
   8 
   9 string max(string a, string b) {
  10     return a>b?a:b;
  11 }

它们的算法都是类似的,只是参与运算的对象的类型不同。我们可以把类型定义成一个参数:

   1 template<class T>
   2 T max(T a, T b) {
   3     return a>b?a:b;
   4 }

调用方法

   1 int main() {
   2     cout << max(5, 7);
   3     cout << max(5.5, 7.5);
   4     cout << max(5, 7.5); //error
   5     cout << max(static_cast<double>(5), 7.5);
   6     cout << max<int>(5, 7.5);
   7     cout << max<double>(5, 7.5);
   8 }

调用时会自动对模板函数的类型进行推导。前面这个模板还不能对两个C字符串进行比较,比如

   1 int main() {
   2     cout << max("world", "hello");
   3 }

可以对函数进行重载

   1 char *max(char *a, char *b) {
   2     return strcmp(a,b)>0?a:b;
   3 }

练习:写一个abs类,可以计算任意类型的数的绝对值


CategoryCpp

C++:模板函数 (2008-03-13 20:21:40由czk编辑)

ch3n2k.com | Copyright (c) 2004-2020 czk.