C++核心编程 3 函数提高

时间:2021-08-06
本文章向大家介绍C++核心编程 3 函数提高,主要包括C++核心编程 3 函数提高使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

函数默认参数

  在C++中,函数的形参列表中的形参是可以有默认值的;

语法:返回值类型 函数名 (参数 = 默认值){ }

实例:

#include<iostream>
using namespace std;

//函数默认参数

int func1(int a, int b = 20, int c = 30)   //语法:返回值类型 函数名 (参数 = 默认值){ }
{
    return a + b + c;
}

//注意事项
//1、如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认参数

/*
int func2(int a, int b = 10, int c, int d)  ---->    int func2(int a, int b = 10, int c = 20, int d = 30)
{
    return a + b + c;
}
*/

//2、如果函数声明中有默认参数,函数实现就不能有默认参数

//声明和实现只能有一个有默认参数
int func2(int a = 10, int b = 10);    //   <----    int func2(int a, int b);
int func2(int a, int b)               //   <----    int func2(int a = 10, int b = 10)
{
    return a + b;
}

int main()
{

    //cout << func1(10 , 20) << endl;  //如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值
    cout << func2() << endl;

    system("pause");
    return 0;
}

函数占位参数
  C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

语法:返回值类型 函数名 (数据类型){ }

实例:

#include<iostream>
using namespace std;

//函数占位

void func(int a , int)   //语法:返回值类型 函数名 (数据类型){ }
{
    cout << "this is func" << endl;
}


int main()
{

    func(1,1);

    system("pause");
    return 0;
}

函数重载

作用:函数名可以相同,提高复用性

      函数重载满足条件:

           1、同一个作用域下;

           2、函数名相同;

        3、函数参数类型不同,或者 个数不同,或者顺序不同;

注意:函数的返回值不可以作为函数重载的条件

实例:

#include<iostream>
using namespace std;

//函数重载

//函数重载的满足条件
//1、同一个作用域下   满足:都在全局作用域
//2、函数名相同       满足:都叫func()

void func(double a, int b)   //全局作用域
{
    cout << "func(double a, int b)的调用" << endl;
}

//3、函数参数类型不同,或者个数不同,或者顺序不同

void func(double a, double b)   //函数参数类型不同
{
    cout << "func(double a, double b)的调用!" << endl;
}

void func(double a, int b, int c)   //函数参数个数不同
{
    cout << "func(double a, int b, int c)的调用!" << endl;
}

void func(int a, double b)   //函数参数顺序不同
{
    cout << "func(int a, double b)的调用" << endl;
}

int main()
{
    func(1.0, 2);
    func(1.0, 2.0);    //根据传入参数的的不同,而调用不同的函数
    func(1.0, 2, 3);
    func(1, 2.0);

    system("pause");
    return 0;
}

函数重载注意事项

    1、引用作为重载条件;

实例:

#include<iostream>
using namespace std;

//函数重载的注意事项

//1、引用作为重载条件

void func(int &a)   // int &a = 10;  不合法 引用必须是合法的内存空间,不能是常量
{
    cout << "func(int &a)的调用" << endl;
}

void func(const int &a)   //const int &a = 10;   合法 加上const 编译器做了一层优化,相当于创建了一个临时数据,将a指向了一个临时的空间
{
    cout << "func(const int &a)的调用" << endl;
}


int main()
{
    //int a = 10;
    //func(a);    //打印结果:func(int &a)的调用

    func(10);     //打印结果:func(const int &a)的调用

    system("pause");
    return 0;
}

    2、函数重载碰到函数默认参数

实例:

#include<iostream>
using namespace std;

//函数重载的注意事项

//2、函数重载碰到函数默认参数


void func2(int a, int b=10)
{
    cout << "func2(int a, int b)的调用" << endl;
}

void func2(int a)
{
    cout << "func2(int a)的调用" << endl;
}

int main()
{

    //func2(10);  //当函数重载碰到默认参数,出现二义性,报错,尽量避免这种情况
    func2(10, 20);

    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/kelin1122/p/15108812.html