• C++函数重载


    函数重载是指在同一作用域类,可以有一组相同的函数名,不同参数列表的函数,这种函数被称为重载函数,重载函数通常用来命名一组具有相似功能的函数,可以减少函数名的数量,避免空间被污染。

    #include <iostream>
    
    using namespace std;
    
    void Print(int a)
    {
        cout<<a<<endl;
    }
    
    void Print(string str)
    {
        cout<<str<<endl;
    }
    
    int main()
    {
        Print(123);
        Print("Hello World");
        return 0;
    }
    重载能够是一个函数能够应对不同的参数,完成同样的功能。如果没有重载机制,那么对于不同的数据进行相同的操作,也需要定义名称完全不同的操作。

    int int_add(int a,int b);
    float float_add(float a,float b);

    不用重载,同样功能却需要声明的函数。

     函数重载需要注意的几点:

    (1)重载函数需要参数的数目类型不同,或者排列顺序不同。而与函数名称是否相同以及返回值是否相同无关

    例如

    int sum(float a,int b){return a+b;}

    int sum(int a,float b){return a+b;}//true,参数的顺序不一样

    int sum(float a,int b,int c){return a+b+c;}//true,因为参数的个数不一样

    int sum(float m,int n){return m+n};//false,参数名不同不属于重载

    (2)重载出现二义性时C++会拒绝函数调用

    void print(const char * str,int width);//#1
    void print(double d,int width);//#2
    void print(long l,int width);//#3
    void print(int i,int width);//#4
    void print(const char * str);//#5
    
    print("Pancakes",15);//use #1
    print("Syrup");//use #5
    print(1990.0,10);//use #2
    print(1999,12);//use #4
    print(1999L,15);//use #3

    当出现二义性的时候C++就会拒绝函数调用

    unsigned int year=3210;
    print(year,6);// ambiguous call 非法调用
    print调用的时候不知道与哪一个函数原型匹配。因为上面有三个函数原型都将数字作为第一个参数,因此C++会拒绝这种函数调用

    (3)类型引用和类型不能作为函数调用

    double cube(double x);
    double cube(double &x);
    当调用函数时,如double m=cube(x),编译器并不能判断需要调用哪一个函数。
    (4)使用const变量修饰的变量不能赋值给const,而非const变量可以赋值给const变量

    void dribble(char * bits);
    void dribble(const char * cbits);
    void dabble(char *bits);
    void drivel(const char * bits);
    
    const char  p1[20]="Hello World";
    char p2[20]="It's a good day";
    dribble(p1); //dribble(const char)
    dribble(p2); //dribble(char)
    dabble(p1);//no match
    dabble(p2);//dabble(char *)
    drivel(p1);//drivel(const char *)
    drivel(p2);//drivel(const char *)


  • 相关阅读:
    JvisualVM、JMC监控远程服务器
    MVC学习笔记3
    MVC学习笔记2
    菜鸟级appium 必看
    关于redis一些问题记录
    git和github的区别
    VMware快照
    LR创建数据源读取excel
    mysql 5.7.18 源码安装笔记
    IDEA 配置Junit4
  • 原文地址:https://www.cnblogs.com/gaot/p/7709698.html
Copyright © 2020-2023  润新知