模板和泛型
模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。
每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector
您可以使用模板来定义函数和类,接下来让我们一起来看看如何使用。
函数模板
模板函数定义的一般形式如下所示:
函数模板模板函数定义的一般形式如下所示:template <typename type> ret-type func-name(parameter list){// 函数的主体}
类模板
正如我们定义函数模板一样,我们也可以定义类模板。泛型类声明的一般形式如下所示:
template <class type> class class-name {...}
注意,声明或定义对象要用这种格式:
ClassName<T> obj;
示例代码
#include <iostream>using namespace std;template< class T>class Box{public:Box(T n):num(n) { cout << "调用构造函数!" << endl; }~Box() {cout << "调用析构函数!" << endl;}T getNum() {return num;}private:T num;};template <typename T>inline T const& mymax(T const& a, T const& b){return a < b ? b : a;}template<typename T>const T sum(T a, T b){return a+b;}int main(){int i = 39;int j = 20;cout << "Max(i, j): " << sum(i, j) << endl;cout << "Max(i, j): " << max(i, j) << endl;//注意,声明或定义对象要用种格式:ClassName<T> obj;Box<int> mybox(5);cout<<mybox.getNum()<<endl;Box<double> hisbox(25);cout << hisbox.getNum() << endl;}
