模板(template)
一、模板概述
●模板是对具有相同特性的函数或类的再抽象,模板是一种参数化的多态性工具。
●所谓参数化多态性,是指将程序所处理的对象的类型参数化,使一段程序代码可以用于处理多种不同类型的对象。
●采用模板编程,可以为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。
●分为函数模板与类模板
二、模板实例化
模板通过参数实例化可以构建具体的函数或类,称为模板函数和模板类
如果不使用模板进行书写,则会有出现下面的情况:
例:数据为int或double时的求最大值问题
int Max(int x,int y){
if(x>y)
return x;
else
return y;
}
double Max(double x,double y){
if(x>y)
return x;
else
return y;
}
●这例问题有两个函数。
●对于同一问题,各函数只是参数类型不一样,其功能在本质上完全相同。
●若能写一段通用代码,适用于各种数据类型,则代码的可重用性大大提高。
●函数模板就是为满足这一需求而产生的。
三、定义模板
1、函数模板:
定义:
template <模板形参表>
返回值类型 函数名(参数表){
函数体
}
注:template是模板定义的关键字。
<模板形参表>中包含一个或多个用逗号分开的模板形式参数,每一项均由关键字class或typename引导一个由用户命名的标识符,此标识符为模板参数(用来进行类型传递)
2、类模板:
●如同函数模板一样,类模板是参数化的类,即用于实现数据类型参数化的类。
●应用类模板可以使类中的数据成员、成员函数的参数及成员函数的返回值能根据模板参数匹配情况取任意数据类型。
●这种类型既可以是C++预定义的数据类型,也可以是用户自定义的数据类型。
定义:
template <模板形参表>
class
类模板名
{
成员的声明;
}