zoukankan      html  css  js  c++  java
  • 函数的重载和模板

    函数的重载 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才可以,不能是个变量。

    阅读原文

  • 相关阅读:
    c++ 中bool 的默认值
    cocos2d CCLOG格式符号表
    c++数组指针bug
    cocos2d-x-2.2.6创建工程
    Nape实现坐标旋转角度回弹
    haxe 中使用音效
    haxe 嵌入swf 读取里面的内容
    haxe 配置
    Spring Tool Suite(STS)基本安装配置
    git提交忽略文件.gitignore内容
  • 原文地址:https://www.cnblogs.com/springbrotherhpu/p/10918267.html
Copyright © 2011-2022 走看看