您当前的位置: 首页 >  c++

小林coding

暂无认证

  • 0浏览

    0关注

    167博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ 模板常见特性(函数模板、类模板)

小林coding 发布时间:2020-01-09 09:50:00 ,浏览量:0

背景

C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量。

C++ 提高代码的可重用性主要有两方面:

  • 继承
  • 模板

继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的特性。

使用「模板」的特性设计,实际上也就是「泛型」程序设计。

函数模板 01 变量交换函数模板

假设我们设计一个交换两个整型变量的值的函数,代码如下:

// 交换两个整型变量的值的Swap函数:
void Swap(int & x,int & y)
{
    int tmp = x;
    x = y;
    y = tmp;
}

如果是浮点类型的变量的值交换,则替换 int 类型为 double 即可,代码如下:

// 交换两个double型变量的值的Swap函数:
void Swap(double & x,double & y)
{
    double tmp = x;
    x = y;
    y = tmp;
}

那如果是其他变量类型的值交换,那不是每次都要重新写一次 Swap 函数?是不是很繁琐?且代码后面会越来越冗余。

能否只写一个 Swap 函数,就能交换各种类型的变量?

答案是肯定有的,就是用「函数模板」来解决,「函数模板」的形式:

template 
返回值类型 模板名 (形参表)
{
    函数体
};

具体 Swap 「函数模板」代码如下:

template 就是模板定义的关键词,T 代表的是任意变量的类型。

template 
void Swap(T & x,T & y)
{
    T tmp = x;
    x = y;
    y = tmp;
}

那么定义好「函数模板」后,在编译的时候,编译器会根据传入 Swap 函数的参数变量类型,自动生成对应参数变量类型的 Swap 函数:

int main()
{
    int n = 1,m = 2;
    Swap(n,m); //编译器自动生成 void Swap(int & ,int & )函数
    
    double f = 1.2,g = 2.3;
    Swap(f,g); //编译器自动生成 void Swap(double & ,double & )函数
    
    return 0;
}

上面的实例化函数模板的例子,是让编译器自己来判断传入的变量类型,那么我们也可以自己指定函数模板的变量类型,具体代码如下:

int main()
{
    int n = 1,m = 2;
    Swap(n,m);     // 指定模板函数的变量类型为int
    
    double f = 1.2,g = 2.3;
    Swap(f,g); // 指定模板函数的变量类型为double
    
    return 0;
}
02 查询数组最大值函数模板

在举一个例子,下面的 MaxElement 函数定义成了函数模板,这样不管是 int、double、char 等类型的数组,都可以使用该函数来查数组最大的值,代码如下:

// 求数组最大元素的MaxElement函数模板
template 
T MaxElement(T a[], int size) // size是数组元素个数
{
    T tmpMax = a[0];
    for(int i = 1;i             
关注
打赏
1659932071
查看更多评论
0.0423s