C++函数的重载、函数的默认参数、函数的占位参数详解(2)

目录

一、函数默认参数

二、函数的占位参数

三、函数的重载

四、函数重载注意事项


一、函数默认参数

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

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

需要注意

  1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值。

  2. 如果函数声明有默认值,函数实现的时候就不能有默认参数。

实例

 #include <iostream>
 using namespace std;
 ​
 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;
 }
 ​
 int main() 
 {
     cout << "ret = " << func(20) << endl;           // 没有默认值的参数在调用时必须加参数
     cout << "ret = " << func(20, 20) << endl;       // 有默认值的参数在调用时 可以不传参数
     cout << "ret = " << func(20, 20, 20) << endl;   // 可以在函数列表里填写参数覆盖默认参数
     
     system("pause");
 ​
     return 0;
 }

结果

 ret = 40
 ret = 50
 ret = 60
 请按任意键继续. . .

二、函数的占位参数

概述:在C++中函数的形参列表里可以有占位参数,用来做占位。调用函数时必须填补该位置,使用占位参数来声明一个函数,这些参数在函数声明中没有具体的名称,但它们的存在允许你在函数的实现部分使用它们。占位参数通常用于泛型编程和模板类中。

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

实例

 #include <iostream>
 using namespace std;
 ​
 //函数占位参数 ,占位参数也可以有默认参数
 void func(int a, int)
 {
     cout << "this is func" << endl;
 }
 ​
 int main() {
 ​
     func(10,10); // 占位参数必须填补
 ​
     system("pause");
 ​
     return 0;
 }

结果

 this is func
 请按任意键继续. . .

占位参数在C++中的主要用途是在模板编程和函数对象中,而不是在传统的普通函数中。这是因为普通函数在定义时需要具体参数的名称和类型以便在函数内部进行操作。而模板函数或函数对象允许你创建更通用的函数或操作符。


三、函数的重载

概述:函数重载是一种允许你定义多个具有相同名称但不同参数列表的函数的特性。函数重载使你可以使用相同的函数名来执行不同的操作,根据调用时提供的参数来确定调用哪个版本的函数。

函数重载的条件

  1. 函数在同一作用域下

  2. 函数名称相同,但参数列表不同:参数列表的差异可以包括参数数量不同、参数类型不同、参数的顺序不同

  3. 返回类型不影响函数重载:两个函数如果具有相同的参数列表,但返回类型不同,将被认为是重复定义,会导致编译错误。

  4. 函数重载是静态多态(编译时多态):编译器根据函数调用时提供的参数来选择调用哪个版本的函数,因此函数重载在编译时解析,而不是运行时。

实例

#include <iostream>
 using namespace std;
 // 函数重载需要函数都在同一个作用域下
 ​
 // 重载的函数,参数类型不同
 int add(int a, int b) 
 {
     return a + b;
 }
 ​
 double add(double a, double b) 
 {
     return a + b;
 }
 ​
 // 重载的函数,参数数量不同
 int add(int a, int b, int c) {
     return a + b + c;
 }
 ​
 // 重载的函数,参数类型和参数数量均不同
 double add(int a, double b) 
 {
     return a + b;
 }
 ​
 int main() 
 {
     cout << add(2, 3)     << endl;       // 调用第一个add函数
     cout << add(2.5, 3.7) << endl;       // 调用第二个add函数
     cout << add(2, 3, 4)  << endl;       // 调用第三个add函数
     cout << add(2, 3.5)   << endl;       // 调用第四个add函数
 ​
     return 0;
 }

结果

 5
 6.2
 9
 5.5

四、函数重载注意事项

  • 引用作为重载条件

  • 函数重载碰到函数默认参数

实例

 #include <iostream>
 using namespace std;
 ​
 //函数重载注意事项
 //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;
     // 1、引用作为重载条件
     func(a);    // 调用无const引用重载  里面不能填10 只能填变量名引用
     func(10);   // 调用有const引用重载  这里的引用为常量引用
 ​
     // 2、函数重载碰到函数默认参数
     // func2(10); // 碰到默认参数产生歧义,需要避免
 ​
     return 0;
 }

结果

 func (int &a) 调用
 func (const int &a) 调用
 ​

上一篇:C++ 引用详解

下一篇:C++类的定义和使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值