• 56)函数模板的基本语法


    1)问题引入-->为啥有函数模板

          ---->首先是,我们编写一个 交换两个数的C语言代码:

     1 #include<iostream>
     2  
     3 using namespace std;
     4 //加入这两个数是整数
     5 void jiaohuan(int a,int b)
     6 {
     7     a=a+b;
     8     b=a-b;
     9     a=a-b;
    10 }
    11 
    12 //要是两个数double型的
    13 void  jiaohuan(double a,double b)
    14 {
    15     a=a+b;
    16     b=a-b;
    17     a=a-b;
    18 }
    19 
    20 int main()
    21 {
    22 
    23     
    24     return 0;
    25 }

        看,我同样是交换两个数,根据不同的数据类型,可能写很多不同类型的函数,那么就增加了维护成本,因为,你每编写一个函数,就得需要维护,

    那么  怎么解决这个问题?

    就用模板技术--->模板是啥,就是类型参数化,编写代码可以忽略类型,用一个标志或者符号

    为了让编译器区分是  普通函数还是模板函数      所以  得告诉编译器----->我要编写模板函数了,所以就有了一个关键子--->template

    编写模板函数的步骤:
      1)写上关键子  template

      2)因为,你的函数不同的类型 你得用一个自己的名字代替   那么就有了    

          template  <class  你起的变量的名字>   或者  template  <typename 你起的变量的名字>                 ----->这个就是告诉编译器  我下面要写模板函数了,所以啊,你要是遇到奇怪的东西  不要报错。

      3)然后写我的模板函数了:

     1 //下面是模板函数
     2 template <class wangchao>
     3 void hh(wangchao &a,wangchao &b)
     4 {
     5     a=a+b;
     6     b=a-b;
     7     a=a-b;
     8 }
     9 int main()
    10 {
    11 
    12     int a=3;
    13     int b=4;
    14     hh(a,b);
    15     cout<<a<<endl;
    16     cout<<b<<endl;
    17     return 0;
    18 }

    注意:
        1)template  <class t1,class t2.class t3~~~~~~~~~~~~~~~>       这个尖括号里面可以写很多个,并不是只有一个的

        2)templata仅仅对它下面的第一个函数有作用,第二个就不起作用了,所以  你还得重新定义你的template<class tt>

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    上面的模板方法在main中能运行,怎么判断的变量类型:
          1)上面的  hh(a,b)   是编译器自动推导的,根据你调用模板方法时传的参数类型,去替换掉你编写模板方法时  写的那个自己的变量类型wangchao

          2)可以显式指定类型---->   hh<int>(a,b)    就是告诉编译器,我的传的值是int的

  • 相关阅读:
    nodejs微服务
    node 操作文件流 fs 同步与异步 流式文件的写入与读取
    node判断文件目录是否存在
    Nodejs 使用 Chrome DevTools 调试 --inspect-brk
    使用ovftool工具实现exsi上主机的导入导出
    redis哨兵
    LVS+Nginx
    nginx的proxy代理缓存
    flanneld启动报错Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
    flanneld启动报错Failed to create SubnetManager: parse first path segment in URL cannot contain colon
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/8279646.html
Copyright © 2020-2023  润新知