模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。
由于类模板包含类型参数,因此又称为参数化的类。如果说类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模板的实例。
函数模板:template <typename T> T fun_name(const T&, const T&);
类模板:template <typename T> class class_name {
public:
T t;
void test(const T& t);
}
类模板作用域在模板定义的整个过程
类模板不能重复
可以只声明,不定义
形参必需带上typename 或者 class
int a = fun_name(3, 4);
class_name<int> c1;
实例化时机在函数调用或者类实例构建时实例化模板
函数模板的一般定义形式是:
template<类型形式参数表> 返回类型 FunctionName(形式参数表)
{
//函数定义体
}
其中的类型形式参数表可以包含基本数据类型,也可以包含类类型。如果是类类型,则需加前缀class。
类模板的一般说明形式是:
template<类型形式参数表> class className
{
//类声明体
};
template<类型形式参数表>
返回类型 className<类型名表>::MemberFuncName1(形式参数表)
{
//成员函数定义体
}
template<类型形式参数表>
返回类型 className<类型名表>::MemberFuncName2(形式参数表)
{
//成员函数定义体
}
...
template<类型形式参数表>
返回类型 className<类型名表>::MemberFuncNameN(形式参数表)
{
//成员函数定义体
}
其中的类型形式参数表与函数模板中的意义一样。后面的成员函数定义中,className<类型名表>中的类型名表,是类型形式参数的使用。
2.函数模板与模板函数的区别
3.类模板和模板类的区别
与类和函数的定义不同,类模板和函数模板的定义一般放在头文件中。
使用类模板的方法为:
归纳的介绍,可以这样声明和使用类模板:
关于类模板的几点说明: