06 C++ 模板

模板

实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性

模板的本质:带有部分“空白”的代码块(函数、类),编译器自动“填空”后形成完整的代码块

函数模板

函数模板并不是真正意义上的函数,编译器遇到函数调用时,将根据实参类型和函数模板一起产生函数代码

格式:

template  < 类型参数表 > // < class 或 typename T >
返回值类型  函数名 ( 形式参数表 )
{
    // 函数体
} 

其中,templateclass 是关键字,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(){}
posted @ 2025-04-22 18:28  YamadaRyou  阅读(24)  评论(0)    收藏  举报