写点什么

C++ 关于函数参数的分析与函数重载进阶教程

作者:CtrlX
  • 2022 年 8 月 02 日
  • 本文字数:1377 字

    阅读完需:约 5 分钟

C++关于函数参数的分析与函数重载进阶教程

函数提高

函数默认参数

分析

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


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


示例:


int func(int a, int b = 10, int c = 10) {  return a + b + c;}
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; cout << "ret = " << func(100) << endl;
system("pause");
return 0;}
复制代码


PS:如果向函数传了数据就用所传的数据,如果没有传则用函数形参列表中的默认值。

注意事项

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


❌错误写法:b 之后必须都有默认参数:c 和 d 也必须有默认参数



✔正确写法



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


✔正确写法




函数占位参数

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


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


在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术


示例:


//函数占位参数 ,占位参数也可以有默认参数void func(int a, int) {  cout << "this is func" << endl;}
int main() {
func(10,10); //占位参数必须填补
system("pause");
return 0;}
复制代码

函数重载

函数重载概述

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


函数重载满足条件:


  • 同一个作用域下

  • 函数名称相同

  • 函数参数类型不同 或者 个数不同 或者 顺序不同


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


示例:


//函数重载需要函数都在同一个作用域下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;}
复制代码


案例刨析


参数个数不同,图一为 0 个图二为 1 个




参数类型不同



参数顺序不同


函数重载注意事项

  • 引用作为重载条件

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


示例:


//函数重载注意事项//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; func(a); //调用无const func(10);//调用有const

//func2(10); //碰到默认参数产生歧义,需要避免
system("pause");
return 0;}
复制代码


案例刨析


引用作函数重载条件:函数参数类型不同




图一二这种情况表面属于重载,但实际上会报错!所以写函数重载时尽量避免使用默认参数!图三就可以正常运行。





注意:函数的返回值不可以作为函数重载的条件,条件见上面三条



发布于: 刚刚阅读数: 3
用户头像

CtrlX

关注

个人博客ctrlx.life 2022.08.01 加入

研究网络工程,数据结构与算法

评论

发布
暂无评论
C++关于函数参数的分析与函数重载进阶教程_c++_CtrlX_InfoQ写作社区