C++函数提升

前言:

主要介绍函数的默认参数用法,占位参数的用法,函数重载的相关语法和相关注意事项。

    • 函数的默认参数:

1.1函数默认参数的简介:

C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。

所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。

1.2函数默认参数的语法:

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

#include 
using namespace std;
void func(int n, float b = 1.2, char c = '@')
{
    cout << n << ", " << b << ", " << c << endl;
}
int main()
{
    //为所有参数传值
    func(10, 3.5, '#');
    //为n、b传值,相当于调用func(20, 9.8, '@')
    func(20, 9.8);
    //只为n传值,相当于调用func(30, 1.2, '@')
    func(30);

    system("pause");
    return 0;
}

1.3函数默认参数的注意事项:

  1. 如果某个位置参数有默认值,那么从这个位置往后,从左到右,必修都要有默认值

  1. 如果函数声明有默认值,函数实现的时候就不能有默认值,简单地说:函数声明与函数的实现只能有一个拥有默认值。

正确的写法:

void func(int a, int b=10, int c=20){ }
void func(int a, int b, int c=20){ }

错误的写法:

void func(int a, int b=10, int c=20, int d){ }
void func(int a, int b=10, int c, int d=20){ }

    • 函数占位参数:

2.1函数占位参数的简介:

c++在声明函数时,可以设置占位参数。占位参数只有参数类型声明,而没有参数名声明。一般情况下,在函数体内部无法使用占位参数。

2.2函数占位参数的语法:

返回值类型 函数名 (数据类型){ }
void TestFunc01(int a,int b,int){
    //函数内部无法使用占位参数
    cout << "a + b = " << a + b << endl;
}

//占位参数也可以设置默认值
void TestFunc02(int a, int b, int = 20){
    //函数内部依旧无法使用占位参数
    cout << "a + b = " << a + b << endl;
}

int main(){

    //错误调用,占位参数也是参数,必须传参数
    //TestFunc01(10,20); 
    //正确调用
    TestFunc01(10,20,30);
    //正确调用
    TestFunc02(10,20);
    //正确调用
    TestFunc02(10, 20, 30);

    return EXIT_SUCCESS;
}

    • 函数重载:

3.1函数重载的简介:

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。 这就是重载函数。 重载函数常用来实现功能类似而所处理的数据类型不同的问题。 不能只有函数返回值类型不同。

3.2函数重载的作用:

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

3.3函数重载满足条件:

  1. 同一个作用域下

  1. 函数名称相同

  1. 函数参数类型不同或者个数不同或者顺序不同

void func()
{
    cout << "func的调用" << endl;
}
void func(int a)
{
    cout << "func(int a)的调用!" << endl;
}
void func(double a)
{
    cout << "func(int a)的调用!" << endl;
}
void func(int a, double b)
{
    cout << "func" << endl;
}
void func( double b,int a)
{
    cout << "func" << endl;
}
int main()
{
    //func(10);
    //func();
    //func(3.14);
    //func(10, 3.14);
    //func(3.14, 10);
    system("pause");
    return 0;
}

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

    • 函数重载的注意事项:

4.1引用作为重载条件

//函数重载的注意事项:
//1.引用作为重载的条件
void func(int& a)
{
    cout << "func(int &a)" << endl;
}
void func(const int& a)
{
    cout << "func(int &a)" << endl;
}
//以上一组代码的传入参数类型不同

4.2函数重载碰到函数默认参数

//2.函数重载遇到默认参数
void func2(int a)
{
    cout << "func2(int a)" << endl;
}
void func2(int a,int b = 10)
{
    cout << "func2(int a,int b = 10)" << endl;
}

int main()
{
    int a = 10;
    //func(a);//因为a是变量,所以不传入带有const的那组函数
    //func(10);//因为10为常量,所以传入带有const的那组函数,如果走无const那组函数就不合法,因为是int &a = 10;然而const int &a = 10;是合法的
    //func2(10);//当函数重载遇到默认参数,出现二义性,报错,尽量避免这种情况
}

你可能感兴趣的:(C++的学习,c++)