zoukankan      html  css  js  c++  java
  • 25.C++- 泛型编程之函数模板(详解)

    1)初探函数模板

    2)深入理解函数模板

    3)多参函数模板

    4)重载函数模板


    当我们想写个Swap()交换函数时,通常这样写:

    但是这个函数仅仅只能支持int类型,如果我们想实现交换double,float,string等等时,就还需要从新去构造Swap()重载函数,这样不但重复劳动,容易出错,而且还带来很大的维护和调试工作量。更糟的是,还会增加可执行文件的大小.

    函数模板

    • 一种特殊的函数,可通过不同类型进行调用
    • 函数模板是C++中重要的代码复用方式
    • 通过template关键字来声明使用模板
    • 通过typename关键字来定义模板类型

    比如:  

    当我们使用int类型参数来调用上面的Swap()时,则T就会自动转换为int类型.

    函数模板的使用

    • 分为自动调用显示调用

    例如,我们写了一个Swap函数模板,然后在main()函数里写入:

    初探函数模板

    写两个函数模板,一个用来排序数组,一个用来打印数组,代码如下:

    运行打印:

    为什么函数模板能够执行不同的类型参数?

    答:

    • 其实编译器对函数模板进行了两次编译
    • 第一次编译时,首先去检查函数模板本身有没有语法错误
    • 第二次编译时,会去找调用函数模板的代码,然后通过代码的真正参数,来生成真正的函数
    • 所以函数模板,其实只是一个模具,当我们调用它时,编译器就会给我们生成真正的函数.

    试验函数模板是否生成真正的函数

    通过两个不同类型的函数指针指向函数模板,然后打印指针地址是否一致,代码如下:

    运行打印:

    可以发现两个不同类型的函数指针,指向同一个函数模板,打印的地址却都不一样,显然编译器默默帮我们生成了两个不同的真正函数

    其实函数模板可以定义任意多个不同的类型参数,例如:

    注意:

    • 工程中一般都将返回值参数作为第一个模板类型
    • 如果返回值参数作为了模板类型,则必须需要指定返回值模板类型.因为编译器无法推导出返回值类型
    • 可以从左向右部分指定类型参数 

     

    接下来开始试验多参数函数模板

    运行打印:

    <span "="" src="https://images2018.cnblogs.com/blog/1182576/201804/1182576-20180409165102160-1835121533.png" width="374" height="167">

    接下来开始试验重载函数模板

    运行打印:

      接下来下章来学习: 26.C++- 泛型编程之类模板(详解)


    文章来源:https://www.cnblogs.com/lifexy/p/8761325.html

  • 相关阅读:
    微信开发生成带参数的二维码的讲解
    C#利用最新版的WPS实现导入导出
    【模版消息】C#推送微信模版消息(Senparc.Weixin.MP.dll)
    Photoshop的辅助线
    Newtonsoft.Json 两个Attribute含义
    VUE2.0 饿了吗视频学习笔记(二):新版本添加路由和显示Header
    VUE2.0 饿了吗视频学习笔记(一):VUE示例data.json
    Windows句柄数限制
    The CLI moved into a separate package: webpack-cli.解决办法
    Winform窗体设计工具源码
  • 原文地址:https://www.cnblogs.com/xiongjim/p/9674159.html
Copyright © 2011-2022 走看看