cplus:函数

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
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("pause");
 +
 + return 0;
 +}
 +</code>
 +
 +===== 函数提高 =====
 +
 +==== 函数默认参数 ====
 +
 +在C++中,函数的形参列表中的形参是可以有默认值的。
 +
 +**语法**:<code cpp>返回值类型 函数名 (参数 = 默认值) {}</code>
 +
 +**示例代码:**
 +
 +<code cpp>
 +#include <iostream>
 +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("pause");
 +
 + return 0;
 +}
 +</code>
 +
 +==== 函数占位参数 ====
 +
 +C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
 +
 +**语法**:<code cpp>返回值类型 函数名 (数据类型) {}</code>
 +
 +在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术(如重载前置和后置递增运算符)。
 +
 +**示例代码:**
 +
 +<code cpp>
 +#include <iostream>
 +using namespace std;
 +
 +// 函数占位参数,占位参数也可以有默认参数
 +void func(int a, int = 10) {
 + cout << "this is func" << endl;
 +}
 +
 +int main() {
 +
 + // func(10, 10); // 占位参数必须填补
 +    func(10); // 如果占位参数有默认值,可以不填补
 +
 + system("pause");
 +
 + return 0;
 +}
 +</code>
 +
 +==== 函数重载 ====
 +
 +=== 函数重载概述 ===
 +
 +**作用**:函数名可以相同,提高复用性。
 +
 +**函数重载满足条件**:
 +  *   同一个作用域下
 +  *   函数名称相同
 +  *   函数参数**类型不同** 或者 **个数不同** 或者 **顺序不同**
 +
 +**注意**:函数的返回值不可以作为函数重载的条件。
 +
 +**示例代码:**
 +
 +<code cpp>
 +#include <iostream>
 +using namespace std;
 +
 +// 函数重载需要函数都在同一个作用域下
 +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;
 +// }
 +
 +int main() {
 +
 + func();
 + func(10);
 + func(3.14);
 + func(10, 3.14);
 + func(3.14, 10);
 +
 + system("pause");
 +
 + return 0;
 +}
 +</code>
 +
 +=== 函数重载注意事项 ===
 +
 +  *   引用作为重载条件
 +  *   函数重载碰到函数默认参数
 +
 +**示例代码:**
 +
 +<code cpp>
 +#include <iostream>
 +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 << "func2(int a, int b = 10) 调用" << endl;
 +}
 +
 +void func2(int a)
 +{
 + cout << "func2(int a) 调用" << endl;
 +}
 +
 +int main() {
 +
 + int a = 10;
 + func(a); // 调用无const,因为a是变量,可读可写
 + func(10);// 调用有const,因为10是常量
 +
 + // func2(10); // 碰到默认参数产生歧义,需要避免
 +    // 编译器不知道是调用带默认参数的func2,还是只带一个int参数的func2
  
  system("pause");  system("pause");

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • cplus/函数.1764304809.txt.gz
  • 最后更改: 2025/11/28 12:40
  • 张叶安