1.泛型编程
-编写与类型无关的同用代码,是代码复用的一种手段,模板是泛型编程的基础。
2. 函数模板
#include<iostream>
using namespace std;
template<class T> // template<typename T> // 模板参数列表
void Swap(T& x1,T&x2) // 函数参数列表
{
int tmp = x1;
x1 = x2;
x2 = tmp;
}
int main()
{
int a = 10;
int b = 20;
Swap(a, b);
cout << a << b << endl;
}
template <class T>
template <typename T>
在编译器调用时 ,模板实例化,得到需要的函数。
传给函数的参数不同类型 ,则实例化失败。
我们可以选择 使用 显示实例化。
template <class T>
T Add(T x1, T x2)
{
return x1 + x2;
}
int main()
{
int a = 20;
double b = 1.1;
cout << Add<int>(a, b)<<endl;
cout << Add<double>(a, b);
}
<类型>
函数模板和普通函数同时出现时,优先普通函数。
3. 类模板
与函数模板相似。 使用template<class T>
不同的是,由于类和函数不同,不存在形参实参,
所以我们在使用类模板时,使用显示实例化。
template <class T>
class Stack
{
public:
Stack(int capacity = 4)
:_top(0)
, _capacity(capacity)
{
_a = new T[capacity];
}
~Stack()
{
delete[] _a;
_a = nullptr;
_capacity = _top = 0;
}
void push(const T& x);
private:
T* _a;
int _capacity;
int _top;
};
template <class T> //调用时,必须使用这个格式
void Stack<T>::push(const T& x)
{
}
int main()
{
Stack<int> s1; // 显示实例化
Stack<double>s2;
return 0;
}