函数模板
1. 模板编程 : 类似于 Java 中的泛型编程 ;
① 函数模板 : 对应着 Java 中的泛型方法 ;
② 类模板 : 对应 Java 中的泛型类 ;
2. Java 中的泛型方法 :
void <T> fun( T t ){ }
3. C++ 中的模板方法 :
//函数模板 , 对应 Java 泛型方法 // 其中 typename 也可以写成 class template <typename T> T add(T a, T b) { return a + b; }
4. 函数模板作用 : 避免反复定义重载函数 , 例如两个数字相加时 , 需要考虑 int 类型数字相加 , float 类型数字相加 等 , 这些函数的内部行为都是一致的 , 如果使用了模板函数 , 就可以只写一个模板方法即可 ;
5. 对应的函数重载 : 上述函数模板与下面的函数重载实现的功能部分一致 ;
i
nt add(int a, int b) { return a + b; } float add(float a, float b) { return a + b; } double add(double a, double b) { return a + b; }
模板函数功能要比重载多很多 , 上面有很多类型没有列出 ;
6. 代码示例 :
① 模板函数定义 :
//函数模板 , 对应 Java 泛型方法 // 其中 typename 也可以写成 class template <typename T> T add(T a, T b) { return a + b; }
② 模板函数调用代码示例 :
//调用模板函数 , 传入两个 int 类型参数 int number_int = add(8, 8); cout << " 函数模板 两个 int 类型相加 : " << number_int << endl; //调用模板函数 , 传入两个 float 类型参数 float number_float = add(0.8f, 0.8f); cout << " 函数模板 两个 float 类型相加 : " << number_float << endl;
③ 执行结果 :
函数模板 两个 int 类型相加 : 16 函数模板 两个 float 类型相加 : 1.6
类模板
1. 类模板示例 :
//类模板 template <class T , class E> class Template { public: T add(T t, E e) { return t + e; } };
2. 类模板调用 :
//2. 类模板 Template <float, int> templ; float result = templ.add(0.8f, 88); cout << "输出模板类计算结果 : " << result << endl;
3. 执行结果 :
输出模板类计算结果 : 88.8
C++ 中创建了大量的模板类 , 如 queue , vector , list 等容器 , 都是模板类 ;
代码示例
1. 函数模板与类模板定义 :
//函数模板 , 对应 Java 泛型方法 // 其中 typename 也可以写成 class template <typename T> T add(T a, T b) { return a + b; } //类模板 template <class T , class E> class Template { public: T add(T t, E e) { return t + e; } };
2. 模板编程调用 :
//V. 模板编程 //1. 函数模板 //调用模板函数 , 传入两个 int 类型参数 int number_int = add(8, 8); cout << " 函数模板 两个 int 类型相加 : " << number_int << endl; //调用模板函数 , 传入两个 float 类型参数 float number_float = add(0.8f, 0.8f); cout << " 函数模板 两个 float 类型相加 : " << number_float << endl; //2. 类模板 Template <float, int> templ; float result = templ.add(0.8f, 88); cout << "输出模板类计算结果 : " << result << endl;
3. 执行结果 :
函数模板 两个 int 类型相加 : 16 函数模板 两个 float 类型相加 : 1.6 输出模板类计算结果 : 88.8