• C++基础——函数


    1 默认参数

    函数的参数可以设置默认值,在调用传参的时候如果没有传对应参数,则使用默认参数,如果传入了参数则使用会使用传入的参数覆盖默认参数。

    #include 
    
    using namespace std;
    
    //传统函数
    void fun1(int a, int b) {
        cout << a + b << endl;
    }
    
    //使用默认参数
    void fun2(int a, int b = 3) {
        cout << a + b << endl;
    }
    
    int main() {
        fun1(1, 2);
        fun2(1);
        fun2(1, 2);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    输出

    3
    4
    3
    
    • 1
    • 2
    • 3

    需要注意的是,默认参数的设置只能是从右往左,如果某一个设置了默认参数,则只能在这个参数的右边出现默认参数,默认参数不能出现在中间,否则会引起混淆。

    2 参数占位符

    参数列表可以设置占位符,用于占位

    #include 
    using namespace std;
    
    //使用函数占位符
    void fun3(int a, int) {
        cout << a << endl;
    }
    
    int main() {
        fun3(3, 2);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    拥有函数占位符,调用传参的时候必须传入一个对应参数

    3 函数重载

    同一个作用域下,可以存在多个重名函数,只是函数的特征参数不同

    #include 
    using namespace std;
    
    void fun4(int a) {
        cout << "a = " << a << endl;
    }
    
    void fun4(int a, int b) {
        cout << "a = " << a << " b = " << b << endl;
    }
    
    int main() {
        fun4(1);
        fun4(1,3);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出

    a = 1
    a = 1 b = 3
    
    • 1
    • 2

    3.1 传值和传引用不能作为重载条件

    void fun4(int a) {
        cout << "a = " << a << endl;
    }
    
    void fun4(int &a) {
        cout << "a = " << a << endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这两个定义不会报错,调用会报错,因为无法确定调用哪个

    3.2 引用类型参数,const可作为重载条件

    void fun4(int &a) {
        cout << "a = " << a << endl;
    }
    
    void fun4(const int &a) {
        cout << "a = " << a << endl;
    }
    
    int main() {
        int a = 1;
        const int b = 4;
        fun4(a);
        fun4(b);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出

    a = 1
    a = 4
    
    • 1
    • 2

    上面的重载是可行的。const引用可以接收非const实参,非const引用形参不能接受const实参。当两个都存在时,const类型实参会调用const类型形参的函数,非const会调用非const形参的函数。

    3.3 默认参数和函数重载

    void fun4(int a) {
        cout << "a = " << a << endl;
    }
    
    void fun4(int a, int b = 10) {
        cout << "a = " << a << " b = " << b << endl;
    }
    
    int main() {
    	fun4(10);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里会调用出错,因为无法确定是调用第一个还是第二个函数,出现混淆

  • 相关阅读:
    Spring集成hazelcast实现分布式缓存
    Python曲线拟合(polyfit , curve_fit, interp1d插值)
    ESP8266-Arduino编程实例-ADS1015(ADC)驱动
    FutureTask原理解析-java多线程(实现并行计算)
    xss一些笔记
    电子方案开发——智能跳绳方案
    处理机调度算法
    振南技术干货集:C语言的一些“骚操作”及其深层理解(3)
    征途装备如何修改
    cesium开发入门(vue2)
  • 原文地址:https://blog.csdn.net/weixin_49274713/article/details/134000395