一.模板的作用
模板是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;
}