zoukankan      html  css  js  c++  java
  • C++

    函数默认参数

    1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值。
    2. 如果函数声明有默认值,函数实现的时候就不能有默认参数。函数实现和声明只能一个有默认参数。  (我没事我什么要去写一个函数声明,我又不写在下面)
     
    ps:注意和python里面函数参数的区别。
     
     

    函数的占位参数

    C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
    函数部分只写了一个数据类型,表示一个占位参数。
    #include<iostream>
    using namespace std;
    
    //函数占位参数 ,占位参数也可以有默认参数 
    void w(int a,int)
    {
        cout<<"this is w"<<endl;
    }
    
    int main()
    {
        //调用函数的时候,占位参数必须填补
        w(10,10);
        return 0;
    }

    函数重载

    作用:函数名可以相同,提高复用性。
     
    函数重载满足条件:
    1、同一个作用域下;
    2、函数名称相同;
    3、函数参数类型不同 或者 个数不同 或者 顺序不同。
    注意: 函数的返回值不可以作为函数重载的条件,类型不同可以是数据类型不同,也可以是const int &和int &的不同。
    #include<iostream>
    using namespace std;
    
    void w1()
    {
        cout<<"调用w1"<<endl;
    }
    
    void w1(int x)
    {
        cout<<"调用w1****"<<endl;
    }
    
    int main()
    {
        w1(1); // cout<<"调用w1****"<<endl;
        return 0;
    }

    这个clion可以编译出,但是不对吧应该?

    #include<iostream>
    using namespace std;
    
    void w(int x,int y)
    {
        cout<<"调用w1"<<endl;
    }
    
    void w1(int y,int x)
    {
        cout<<"调用w1****"<<endl;
    }
    
    int main()
    {
        w1(1,9); // cout<<"调用w1****"<<endl;
        return 0;
    }
    View Code

    输出:调用w1****

    函数重载注意事项

    1、引用作为重载条件;
    2、函数重载碰到函数默认参数。
    #include<iostream>
    
    using namespace std;
    
    //1、引用作为重载条件
    void w1(int&a)
    {
        cout<<"调用 1"<<endl;
    }
    
    void w1(const int&a)
    {
        cout<<"调用 2"<<endl;
    }
    
    
    //2、函数重载碰到函数默认参数
    void w2(int a,int b=10)
    {
        cout<<"调用 3"<<endl;
    }
    
    void w2(int a)
    {
        cout<<"调用 4"<<endl;
    }
    
    int main()
    {
        int a=10;
        w1(a); // 调用无const(可读可写)
    
        w1(10);//调用有const
        // 如果是无const的话,函数就相当于是int &a=10; 这种语法无法编译
        //调用有const的时候,const int &a=10;这样子是可以的
    
        //w2(10); //碰到默认参数产生歧义(二义性),需要避免
        //尽量不要加默认参数了吧还是
        return 0;
    }
     
  • 相关阅读:
    sudo命令 sudoers文件
    sscanf函数
    printf格式化输出
    c文件操作
    string和char*
    c去除空格 小写转大写
    主机序和网络序转换
    ulimit用法
    mysql基础(附具体操作代码)
    ES6 class
  • 原文地址:https://www.cnblogs.com/OFSHK/p/13071647.html
Copyright © 2011-2022 走看看