函数的重载和模板

函数的重载 overload和模板Template

  • 重载
      在C++ 里面,两个函数可以有同样的名字,但前提是他们的参数不同:数量不同 或者 类型不同。
      
      上面的例子中,两个函数都叫operare,一个是两个int的参数,一个是两个double的参数,当我们调用函数的时候,编译器根据你传入的参数自动确定调用哪个参数
      第一个调用int的函数,作乘积运算
      第二个调用double的函数,作除法运算

  在这里其实不算函数重载,两个函数的定义是不一样的,其实是两个函数,他们具有不同的功能,只是恰好拥有同样的名字而已。

  • 函数模板
      函数重载的话,函数必须有相同的定义
      
      这里定义了两个同样操作的函数,只是参数类型不同,这样我们就可以对不同类型的对象进行加法运算,但是这样写有点费事繁琐啊。
      C++可以用通用模板来定义上面的两个函数。首先定义一个模板,然后实例化这个模板。
      
      注意这个调用的格式:模板名<参数类型>(参数1,参数2)
      编译器会把所有的SomeType替换成int
      
      使用 T 而不是SomeType 作为通用类型,简洁明了,也是常用写法。
      有时候编译器能自动推断出参数的类型,不用在尖括号里定义,前提是两个参数的类型是一样的。上面的例子可以简写为:
      
      省略了<int><double>,但是两个参数类型不一样的话编译器可能就没法自动推断了。

  模板是一个很强大的功能,可以用不同模板类型的参数,或者非模板类型的参数。
    

  这个例子,两个参数的类型是不一样的,而且在实例化的时候使用了自动推断类型,不然就应该像右图那样写<int,double>(10,10.0)
  还可以混合使用模板类型和标准类型的参数
  
  原因是模板参数的值在编译时候就定好了,不是在调用的时候动态赋值,这里是两个实例,一个乘2,一个乘3,那个int类型的传入constant才可以,不能是个变量。

阅读原文

原文地址:https://www.cnblogs.com/springbrotherhpu/p/10918267.html