一.模板的作用
模板是C++支持参数化多态的工具,通常有函数模板和类模板
函数模板针对仅参数类型不同的函数
类模板针对数据成员和成员函数类型不同的类
使用模板能够编写出与类型无关的代码
模版分为函数模版和类模版
按我的理解,C++设计出模版的作用就是把 数据类型和函数功能进行隔离,能够让代码的通用性更高一些,这就是更加适合封装和重用
二.函数模板
1.使用
函数模板中,会根据传入实参的类型来替换函数模板中形参
//声明 template <class T> void Swap(T&a ,T&b){ ... } template <typename T> void Swap(T& a,T& b){ }
//调用 int a,b; Swap(a,b);
2.例子
注意:一个模板声明对应一个函数
#include <iostream> #include <vector> using namespace std; template <typename T> inline T const& Max(T const& a, T const& b) { return a < b ? b : a; } int main() { int i = 39; int j = 20; cout << "Max(i,j)= " << Max(i, j) << endl; double f1 = 13.5; double f2 = 20.7; cout << "Max(f1, f2)= " << Max(f1, f2) << endl; string s1 = "Hello"; string s2 = "World"; cout << "Max(s1, s2)= " << Max(s1, s2) << endl; return 0; }
三.类模板
1.使用
类模板中,根据类<>里面的具体类型来替换类模板中形参类型
//声明 template <class T> template <typename T> class A{ public: T a; T b; T swap(T c,T& d); }; //实现 T A<T>::swap(T c,T& d){ ... }
//调用 A<int> a; A<string> b;
2.例子
注意:一个模板声明对应一个类,并且要重载不同的类型
//TestMain.h template <class T> class A{ public: A(); T g(T a,T b); };
template <class T> A<T>::A(){ } template <class T> T A<T>::g(T a,T b){ return a+b; } int main(){ A<int> a; std::cout<<a.g(1,2)<<std::endl; system("pause"); return 0; }