自学内容网 自学内容网

c++ 学习笔记 函数进阶

1. 函数的默认参数

 1.在C++中,函数的参数分为必选参数和默认参数,必选参数必须传递,默认参数可以选择传递
 2. 语法:返回值类型 函数名(参数 = 默认值) {...}
#include <iostream>
using namespace std;

// 函数默认参数
// 在C++中,函数的参数分为必选参数和默认参数,必选参数必须传递,默认参数可以选择传递
// 语法:返回值类型 函数名(参数 = 默认值) {...}

// 如果我们自己传入数据,则使用传入的数据,如果我们不传入数据,则使用默认值
int func(int a, int b = 20, int c = 30) {
    return a + b + c;
}



// 注意事项:
// 1. 如果某个位置参数有默认值,那么从这个位置往后,从左到右,必须都要有默认值
// int fun2(int a, int b = 10, int c = 10, int d) {   // 错误
//     return a + b + c;
// }

// 2. 如果函数声明有默认值,那么函数实现就不能有默认值
// 声明和实现只能有一个默认值
int func2(int a, int b = 20, int c = 30);
int func2(int a, int b, int c) {
    return a + b + c;
}

int main(int argc, char const *argv[])
{

    cout << func(10, 30) << endl;
    return 0;
}

2. 函数占位参数

占位参数的类型必须指定,占位参数不占用实际的内存空间
c++中函数的形参列表里可以有占位参数,用来占位,调用函数时必须填补该占位参数,否则会报错
// 函数占位参数
// 占位参数的类型必须指定,占位参数不占用实际的内存空间
// c++中函数的形参列表里可以有占位参数,用来占位,调用函数时必须填补该占位参数,否则会报错
// 语法:返回值类型 函数名(数据类型){}
// 占位参数也可以有默认值
void func(int a, int = 10){
    cout << "this is func a: " <<  a << endl;
}

int main(int argc, char const *argv[])
{
    func(10);
    return 0;
}

3. 函数重载

3.1 函数重载概述

作用:函数名相同,提高复用性
同一个作用域下,
函数名相同,
参数列表不同,或者个数不同,或者顺序不同
注意事项:函数的返回值不可以作为函数重载的条件
#include <iostream>
using namespace std;

// 函数重载概述
// 作用:函数名相同,提高复用性
// 同一个作用域下,
// 函数名相同,
// 参数列表不同,或者个数不同,或者顺序不同
// 注意事项:函数的返回值不可以作为函数重载的条件

void func(){
    cout << "func 的调用" << endl;
}

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

void func(double a){
    cout << "func 的调用 double " << a << endl;
}

void func(double a, int b){
    cout << "func 的调用 double int " << a << " " << b << endl;
}

int main(int argc, char const *argv[])
{
    func(8.8,66);
    return 0;
}

3.2 函数重载的注意事项

引用作为重载条件
函数重载碰到默认参数,会造成二义性
#include <iostream>
using namespace std;

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

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

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

// 函数重载碰到默认参数,会造成二义性
void func2(int a){
    cout << "func2 (int a)的调用" << endl;
}

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

int main(int argc, char const *argv[])
{
    // int a = 10;
    // func(a);

    // const int b = 10;
    // func(10); 

    // func2(10); // 函数重载碰到默认参数,会造成二义性
    func2(10,10);
    return 0;
}



原文地址:https://blog.csdn.net/qq_33582129/article/details/144337913

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!