C++学习笔记——函数提高

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1.函数默认参数

1. 如果某个位置参数有默认值那么从这个位置往后从左向右必须都要有默认值
2. 如果函数声明有默认值函数实现的时候就不能有默认参数默认参数不能重定义声明和实现只能一个有默认参数

3.采用默认参数后使用时可以不必传输对应位置的参数直接使用默认参数

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

int func(int a, int b = 10, int c = 10) {
    return a + b + c;
}

//1. 如果某个位置参数有默认值那么从这个位置往后从左向右必须都要有默认值
//2. 如果函数声明有默认值函数实现的时候就不能有默认参数默认参数重定义
int func2(int a = 10, int b = 10);
int func2(int a, int b) {
    return a + b;
}

2.函数占位参数

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

在运算符重载中有使用到用于区别前置++和后置++

//函数占位参数 占位参数也可以有默认参数
void func(int a, int) {
    cout << "this is func" << endl;
}

int main() {

    func(10,10); //占位参数必须填补

    system("pause");

    return 0;
}

3.函数重载

3.1.函数重载的概述

1.条件

1同一个作用域下可以是全局作用域

2函数名称相同

3函数参数类型不同/个数不同/顺序不同通过你给的参数的类型/个数/顺序程序自动帮你找原函数是哪个

使得编译器调用函数时并不会产生歧义可以唯一指定调用的函数

2.目的提高复用性

3.函数的返回值不可以作为函数重载的条件例如返回值是void/int并不是函数重载的条件返回值可以不指定变量接受此时并不能通过返回值类型唯一指定函数产生歧义

//函数重载需要函数都在同一个作用域下
void func()
{
    cout << "func 的调用" << endl;
}
void func(int a)
{
    cout << "func (int a) 的调用" << endl;
}
void func(double a)
{
    cout << "func (double a)的调用" << endl;
}
void func(int a ,double b)
{
    cout << "func (int a ,double b) 的调用" << endl;
}
void func(double a ,int b)
{
    cout << "func (double a ,int b)的调用" << endl;
}

//函数返回值不可以作为函数重载条件
//int func(double a, int b)
//{
//    cout << "func (double a ,int b)的调用" << endl;
//}

3.2.函数重载的注意事项

1.func(const int &a)与func(int &a)

1const int &a不允许对a进行修改只读

2int &a允许对a进行修改

因此当传入参数为a时a为变量因变量允许被修改两个函数都可以被调用但是相比之下更加符合int &a可以被修改的特性更不符合const不允许修改的特性故优先调用int &a

当传入参数为1010为常量因常量不允许被修改因此不满足int &a中a可被修改的要求故只能调用const

因为引用不能是常量引用必须指向一片地址空间即int &a = 10是错误的

2.func2(int a)和func2(int a, int b = 10)

1如果只传入一个参数编译器将会无法识别应该调用哪个函数产生歧义因为此时这两个func2都只需一个参数即可调用

2如果传入两个参数则不会产生歧义编译器将会调用func(int a, int b = 10)

这就导致在这种情况下func(int a)将无法被调用因此使用函数重载时应避免使用默认参数

//函数重载注意事项
//1、引用作为重载条件

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

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


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

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

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

int main() {

    int a = 10;
    func(a); //调用无const
    func(10);//调用有const


    //func2(10); //碰到默认参数产生歧义需要避免

    system("pause");

    return 0;
}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++