差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 | |||
| cplus:函数 [2025/11/28 12:40] – [值传递] 张叶安 | cplus:函数 [2025/11/28 13:09] (当前版本) – 张叶安 | ||
|---|---|---|---|
| 行 254: | 行 254: | ||
| int b = 200; | int b = 200; | ||
| swap(a, b); | swap(a, b); | ||
| + | |||
| + | system(" | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== 函数提高 ===== | ||
| + | |||
| + | ==== 函数默认参数 ==== | ||
| + | |||
| + | 在C++中,函数的形参列表中的形参是可以有默认值的。 | ||
| + | |||
| + | **语法**:< | ||
| + | |||
| + | **示例代码:** | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | using namespace std; | ||
| + | |||
| + | // 函数默认参数 | ||
| + | // 如果我们自己传入数据,就用自己的数据,如果没有,那么就用默认值 | ||
| + | // 语法: 返回值类型 函数名 (形参 = 默认值) {} | ||
| + | int func(int a, int b = 10, int c = 10) { | ||
| + | return a + b + c; | ||
| + | } | ||
| + | |||
| + | // 注意事项: | ||
| + | // 1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值 | ||
| + | // int func2(int a = 10, int b = 10, int c) { // 错误,c没有默认值 | ||
| + | // return a + b + c; | ||
| + | // } | ||
| + | |||
| + | // 2. 如果函数声明有默认值,函数实现的时候就不能有默认参数 | ||
| + | // 声明和实现只能有一个有默认参数 | ||
| + | int func2(int a = 10, int b = 10); | ||
| + | |||
| + | int func2(int a, int b) { | ||
| + | return a + b; | ||
| + | } | ||
| + | |||
| + | int main() { | ||
| + | |||
| + | cout << "ret = " << func(20, 20) << endl; // 传入两个参数,c使用默认值 | ||
| + | cout << "ret = " << func(100) << endl; // 传入一个参数,b和c使用默认值 | ||
| + | |||
| + | system(" | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== 函数占位参数 ==== | ||
| + | |||
| + | C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。 | ||
| + | |||
| + | **语法**:< | ||
| + | |||
| + | 在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术(如重载前置和后置递增运算符)。 | ||
| + | |||
| + | **示例代码:** | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | using namespace std; | ||
| + | |||
| + | // 函数占位参数,占位参数也可以有默认参数 | ||
| + | void func(int a, int = 10) { | ||
| + | cout << "this is func" << endl; | ||
| + | } | ||
| + | |||
| + | int main() { | ||
| + | |||
| + | // func(10, 10); // 占位参数必须填补 | ||
| + | func(10); // 如果占位参数有默认值,可以不填补 | ||
| + | |||
| + | system(" | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== 函数重载 ==== | ||
| + | |||
| + | === 函数重载概述 === | ||
| + | |||
| + | **作用**:函数名可以相同,提高复用性。 | ||
| + | |||
| + | **函数重载满足条件**: | ||
| + | * | ||
| + | * | ||
| + | * | ||
| + | |||
| + | **注意**:函数的返回值不可以作为函数重载的条件。 | ||
| + | |||
| + | **示例代码:** | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | using namespace std; | ||
| + | |||
| + | // 函数重载需要函数都在同一个作用域下 | ||
| + | void func() | ||
| + | { | ||
| + | cout << "func 的调用!" | ||
| + | } | ||
| + | |||
| + | void func(int a) | ||
| + | { | ||
| + | cout << "func (int a) 的调用!" | ||
| + | } | ||
| + | |||
| + | void func(double a) | ||
| + | { | ||
| + | cout << "func (double a)的调用!" | ||
| + | } | ||
| + | |||
| + | void func(int a, double b) | ||
| + | { | ||
| + | cout << "func (int a ,double b) 的调用!" | ||
| + | } | ||
| + | |||
| + | void func(double a, int b) | ||
| + | { | ||
| + | cout << "func (double a ,int b)的调用!" | ||
| + | } | ||
| + | |||
| + | // 函数返回值不可以作为函数重载条件 | ||
| + | // int func(double a, int b) | ||
| + | // { | ||
| + | // cout << "func (double a ,int b)的调用!" | ||
| + | // } | ||
| + | |||
| + | int main() { | ||
| + | |||
| + | func(); | ||
| + | func(10); | ||
| + | func(3.14); | ||
| + | func(10, 3.14); | ||
| + | func(3.14, 10); | ||
| + | |||
| + | system(" | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === 函数重载注意事项 === | ||
| + | |||
| + | * | ||
| + | * | ||
| + | |||
| + | **示例代码:** | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | 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; 合法 | ||
| + | { | ||
| + | cout << "func (const int &a) 调用 " << endl; | ||
| + | } | ||
| + | |||
| + | // 2、函数重载碰到函数默认参数 | ||
| + | |||
| + | void func2(int a, int b = 10) | ||
| + | { | ||
| + | cout << " | ||
| + | } | ||
| + | |||
| + | void func2(int a) | ||
| + | { | ||
| + | cout << " | ||
| + | } | ||
| + | |||
| + | int main() { | ||
| + | |||
| + | int a = 10; | ||
| + | func(a); // 调用无const,因为a是变量,可读可写 | ||
| + | func(10);// | ||
| + | |||
| + | // func2(10); // 碰到默认参数产生歧义,需要避免 | ||
| + | // 编译器不知道是调用带默认参数的func2,还是只带一个int参数的func2 | ||
| system(" | system(" | ||