模板和泛型
模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。
每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 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;
}