个人学习C++笔记4

66 阅读2分钟

C++核心编程

3. 函数提高

3.1 函数默认参数

在C++中,函数的形参列表中形参可以有默认值。
语法:返回值类型 函数名 (参数=默认值){}

如果我们传入数据就用自己的数据,如果没有就用默认值

**注意事项

  • 如果某个位置有了默认参数,那么从这个位置往后,从左到右都必须要有默认值
  • 如果函数的声明有默认参数,那么函数的实现就不能有默认参数。声明和实现只能有一个有默认参数

image.png 编译器会不知道该用那个默认参数,即使声明和实现默认参数相同运行也会出错。

3.2 函数占位参数

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

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

占位参数也可以有默认参数

3.3 函数重载

3.3.1 函数重载概述

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

函数重载满足条件:

  • 同一作用域下
  • 函数名称相同
  • 函数参数类型不同或者个数不同或者顺序不同

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

3.3.2 函数重载注意事项

  1. 引用作为重载的条件
#include <iostream>
#include<string>
using namespace std;

void fun(int& a)
{
    cout << " fun(int& a)调用" << endl;
}

void fun(const int& a)
{
    cout << "fun(const int& a)调用" << endl;
}
int main()
{
    int a = 10;
    fun(10);
    system("pause");
    return 0;
}

C++

运行后

image.png 调用fun(const int&a),因为引用必须要有一个合法的空间,要不堆区要不栈区,10是在常量区。

如果想要调用fun(int&a)

int main()
{
    int a = 10;
    fun(a);
    system("pause");
    return 0;
}
C++

把主函数的fun(10),改为fun(a)

image.png

加const和不加const可以作为引用的重载条件
2. 函数重载碰上默认参数

void fun2(int a, int b = 10)
{
    cout << " fun2(int a, int b = 10)的调用" << endl;
}
void fun2(int a)
{
    cout << "fun2(int a)的调用" << endl;
}
int main()
{
    fun2(10);
}
C++

image.png 出现二义性报错,尽量避免出现这种情况

在这个案例中如果传入两个参数,就可以避免这种情况

int main()
{
    fun2(10,20);
}

C++

image.png