什么是模板
模板就是样板。在这里我举一个例子,数组
数组可以是int,可以是double,可以是long等
模板的本质就是把数据类型参数化,体现了面向对象的多态性
函数模板和模板函数
函数模板表示的是对不同数据类型数据进行相同处理的一类函数
模板函数就是讲函数模板实例化生成的具体函数
格式
template <class 模板形参1,class模板形参2,...>
返回类型 函数名(参数表)
{
函数体
}
举例:表明两个相同数据类型比较大小返回大的元素
template<class T>
T &max(T &r1,Tr &2)
{
return (r1>r2)?r1:r2;
}
类模板和模板类
如果在类的定义中将类中的数据成员的类型、成员函数的参数的类型、成员函数的返回值的类型都用模板类型形参来表示,这样就构成了一个代表多个类的类模板。比如数组类模板可适用于整型数组类、浮点型数组类、复数数组类等等
类模板声明格式
template<class 模板类型形参1,class 模板类型形参2,...>
class 类模板名
{
类模板体
};
注意:
如果在类的外部定义类模板中的成员函数,必须采用类似函数模板的格式
template<class 模板类型形参1,class 模板类型形参2,...>
返回类型 类模板名<模板类型形参1,模板类型形参2,...>::成员函数名(参数表)
{
成员函数体
}
类模板经过实例化产生的类叫做模板类
模板类定义格式
类模板名 <实际类型的参数列表> 类对象名(构造函数参数);
值得注意的是,类模板可以作为基类
template <class 派生类模板类型形参,class 基类模板类型形参>
class 派生类模板名 : 继承方式 基类模板名<不带class的基类模板类型形参> { … };