C/C++教程

C++(模板及函数模板)

本文主要是介绍C++(模板及函数模板),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

学习黑马视频后复习模板知识点,参考(1条消息) 《黑马》——C++提高编程_漏网小鱼的博客-CSDN博客,若侵权,请告知,会删。

  1. 模板的概念
  2. 函数模板的基本语法
  3. 函数模板注意事项
  4. 普通函数和函数模板区别
  5. 普通函数和函数模板调用规则
  6. 模板的局限性

1、模板的概念

模板即建立的通用的模具,大大的提高了复用性

特点:

  • 模板不可以直接使用,它为一个框架
  • 模板不是万能的

C++的一种编程思想即泛型编程,主要使用模板

两种模板机制:函数模板和类模板

template<typename T>

函数声明或定义/类

template :声明创建模板

typename : 表面后边跟着的符号为一种函数类型,可以用class代替

T :通用的数据类型

2、函数模板的基本语法

使用如下:

template<typename T>
void mySwap(T& a,T& b)
{
    T& temp = a;
    a = b;
    b = temp;
}

int main()
{
    int a = 10;
    int b = 20;

    //1 自动类型推导
    mySwap(a,b);
    
    //2 显示指定类型
    mySwap<int>(a,b);
}

函数模板两种调用方法:

  • 自动类型推导 : 函数(参数列表)
  • 显示指定类型 :  函数<数据类型>(参数列表)

3、函数模板注意事项

自动类型推导必须推导出一致的数据类型T才可以使用

模板必须要确定出T的数据类型,才可以使用

建议使用显示指定方式调用函数模板

4、普通函数和函数模板的区别

普通函数调用时可以发生自动类型转换(隐式类型转换)。

函数模板调用时,如果采用自动类型推导不会发生隐式类型转换,因为T分不清到底是哪种类型

函数模板调用时,如果采用显示指定方式可以发生隐式类型转换。

如:

int a = 10;

int b = 20;

char c = 'c' ;

myAdd(a,c);//普通函数可以发生隐式类型转换,即char转换成int类型

//myAdd1(a,c);//函数模板调用时,采用自动类型推导,不会发生隐式类型转换,程序报错

没有Add<int>(a,c);//函数模板调用采用显示类型转换,可以发生隐式类型转换

5、普通函数和函数模板调用规则

  1. 当普通函数和函数模板都可以调用时,优先调用普通函数
  2. 可以通过空模板参数列表来强制调用函数模板,如:myPrint<>(a,b),空模板列表即<>
  3. 函数模板也可以发生重载
  4. 如果函数模板可以更好的匹配,优先调用函数模板

6、模板的局限性

当数据类型为自定义数据类型,如Person时,当比较两个Person类型的数据时,可以通过运算符重载,但是不太方便,还有另一种为特定的数据类型提供具体化模板

具体化模板:

显示具体化的原型和定义以template<> 开头,并指出具体类型

template<> bool myCompare(Person& p1,Person& p2) {}

具体化优于常规模板

这篇关于C++(模板及函数模板)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!