zoukankan      html  css  js  c++  java
  • 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的

  • 相关阅读:
    UVa 12174 (滑动窗口) Shuffle
    UVa 1607 (二分) Gates
    CodeForces ZeptoLab Code Rush 2015
    HDU 1525 (博弈) Euclid's Game
    HDU 2147 (博弈) kiki's game
    UVa 11093 Just Finish it up
    UVa 10954 (Huffman 优先队列) Add All
    CodeForces Round #298 Div.2
    UVa 12627 (递归 计数 找规律) Erratic Expansion
    UVa 714 (二分) Copying Books
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/8279646.html
Copyright © 2011-2022 走看看