模板一般分函数模板与类模板
函数模板:
解决,不同数据进行同种操作时,可以给数据定义一个模板类型,以达到函数的通用性
基本语法
template <typename T> //定义模版类型名T
//模版函数定义
T test(T x){
return x;
}
计算绝对值函数:
#include <iostream> using namespace std; template <typename T> T abs(T temp) { temp = temp > 0 ? temp : -temp; return temp; } int main() { int i = 10; double d = -5.5; cout << abs(i) << " " << abs(d) << endl; return 0; }
通过函数模板,计算数值的绝对值,就不用重复为不同类型数据定义函数;
类模板
解决同一种类,定义不过数据,或,其成员函数对不同数据作相同处理;
类模板基本语法:
template <class T>
class abs
{
private:
int i;
T x;
public:
abs(T a, T b){}
}
类模板对象的创建:
abs <int> a;
abs <double> b;
使用例:
#include <iostream> using namespace std; template <class T> class Tes { private: T i; T j; public: Tes(T x = 0, T y = 0) { i = x; j = y; } T put() { return i * j; } ~Tes() {} }; int main() { Tes <int> a(2, 5); cout << a.put() <<endl; Tes <double> b(2.5, 5.5); cout << b.put() <<endl; return 0; }
成员函数外部定义方法:
基本形式:
template<模板形参列表> 函数返回类型 类名<模板形参名>::函数名(参数列表){函数体},
template<class T> void Tes<T>::add(参数列表){函数体},
#include <iostream> using namespace std; //定义模板类 template <class T> class Tes { private: T i; T j; public: Tes(T x = 0, T y = 0) { i = x; j = y; } T put() { return i * j; } T add(); ~Tes() {} }; //外部定义函数方法 template <class T> T Tes<T>::add() { return i + j; } //主函数 int main() { Tes <int> a(2, 5); cout << a.put() <<endl; cout << a.add() <<endl; Tes <double> b(2.5, 5.5); cout << b.put() <<endl; cout << b.add() <<endl; return 0; }
总结:
在类模板中,只要使用到类名的,后面就要有<>的存在;