函数是一个完成某项特定任务的一小段代码,这段代码是有特殊的写法和调用方法的

函数的默认参数

在C++中,函数的形参列表中形参时可以有默认值的

语法

返回值类型 函数名 (参数 = 默认值) {}

 // 函数的默认参数
 int func(int a , int b = 20, int c = 30) {   //如果我们自己传入参数,就用自己的值,如果没有,那就用默认值
     return a + b + c;
 }
 int main() {
     cout << func(10) << endl;   // 只传一个参数,其余两个参数为默认值
     return 0;
 }

注意:

如果某个位置已经有了默认值,那么从这个位置往后,都必须有默认值(否则少传递一个参数的话,参数的顺序就会混乱) 如果函数的声明有默认参数,函数的实现就不能有默认参数.函数的默认参数只能在函数声明(如果有声明和定义分离的情况)或定义中指定一次,不能重复指定。 // // 函数的声明 // int func01(int a = 10, int b = 20); // // 函数的实现 // int func01(int a = 10, int b = 20) { // return a + b; // } // error // 函数的声明 int func01(int a = 10, int b = 20); // 函数的实现 int func01(int a, int b) { return a + b; right }

函数占位参数

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

语法:

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

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

占位参数必须填补

 int main() {
     func(10);  // error   占位参数必须填补
     return 0;
 }

函数重载

C++中的函数重载,(Function Overloading)是指在同一个作用域中可以有多个同名函数,它们的函数名称相同,但是参数列表不同

这里的不同值的是参数的数量,类型或顺序至少有一个不同,函数的返回类型并不影响函数的重载,因为C++编译器不会根据返回类型来区分不同的函数.

函数重载概述

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

编译器会根据调用函数时传递的参数,自动推导应该调用那个函数

 // 实现两数之和
 int Add(int a, int b) {
     return a + b;
 }
 
 double Add(double a, double b) {
     return a + b;
 }
 
 int main() {
 
     int a = 5, b = 10;
     double x = 5.5, y = 10.2;
     cout << "整数相加: " << Add(a, b) << endl;
     cout << "浮点数相加: " << Add(x, y) << endl;
 
     return 0;
 }

函数重载满足的条件:

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

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

函数重载的注意事项

  1. 引用作为重载的条件
 void func(int& a) {  // int& a = 10; 不合法的
     cout << "func(int&a) 调用" << endl;
 }
 void func(const int& a) {     // const itn& a = 10;  合法
     cout << "func(const int& a) 调用" << endl;
 }
 int main() {
     int a = 10;
     func(a);    // func(int&a) 调用
     func(10);  // func(const int& a) 调用
     return 0;
 }

传递a,调用的是 func(int& a);,a 是一个变量,变量是可读可写的

加上const 之后,就变为只读状态,只能读取,不能修改

  1. 函数重载遇到默认参数
 void func(int a) {
     cout << "func(int a) 调用" << endl;
 }
 void func(int a, int b = 10) {
     cout << "func(int a, int b = 10) 调用" << endl;
 }
 
 int main() {

     //func(10);   // error
     func(10, 20);  // func(int a, int b = 10) 调用
     return 0;
 }

当函数重载碰到默认,出现二义性,尽量避免

当值少传递参数的时候,就会报错

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐