06 C++ 模板
模板
实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性
模板的本质:带有部分“空白”的代码块(函数、类),编译器自动“填空”后形成完整的代码块
函数模板
函数模板并不是真正意义上的函数,编译器遇到函数调用时,将根据实参类型和函数模板一起产生函数代码
格式:
template < 类型参数表 > // < class 或 typename T >
返回值类型 函数名 ( 形式参数表 )
{
// 函数体
}
其中,template 和 class 是关键字,class 可以用 typename 代替
函数重载是函数名相同,参数一定不完全相同,利用函数模板,不必对每个函数分别写出相应的代码
int square ( int number )
{ return number * number ; }
float square ( float number )
{ return number * number ; }
//采用函数模板实现square:
template < class T >
T square ( T number )
{ return number * number ; }
// 函数调用
square(1.1,2.2);
square<int>(3,4); // 指定类型
改写为函数模板
初始:
void swap(int &a,int &b)
{ int temp=a;a=b;b=temp; }
在函数开头加上 template < class T > ,将函数形参的类型和局部变量 temp 的类型 int 采用 T替换
template <typename T>
void swap(T &a, T &b)
{ T temp = a;a = b;b = temp; }
使用多种类型
函数模板中可以使用多种通用类型,每个类型必须具有自己的参数
template < class T1 , class T2>
void swap ( T1 &var1 , T2 &var2 )
{
T1 temp ;
temp = var1 ;
var1 = ( T1 ) var2 ;
var2 = ( T2 ) temp ;
}
函数模板重载
template < class T >
T sum ( T valueOne , T valueTwo )
{
return valueOne + valueTwo ;
}
template < class T >
T sum ( T valueOne , T valueTwo , T valueThree )
{
return valueOne + valueTwo + valueThree ;
}
类模板
类模板使程序员可以创建一般形式的类,而不必编写处理不同数据类型的类
类模板的定义和实现必须在同一个文件中,通常是头文件,编译器看到模板实现时才展开模板
格式:
template < class 或 typename T >
class 类名
{
// 类定义
}
类模板对象的创建:
在类 \(A\) 后面跟上 < > 并填上相应类型,模板形参的类型必须在类名后的尖括号中明确指定
A <int> m;
A <int,double> m;
类模板外部定义成员函数:
template <模板形参列表>
函数返回类型 类名<模板形参名>::函数名(参数列表)
{
//函数体
}
// 例子:
template<class T1,class T2>
void A<T1,T2>::h(){}

浙公网安备 33010602011771号