c++学习笔记(三):函数++
函数PLUS
函数默认参数
在c++中,函数的形参列表中的形参是可以有默认值的。调用函数时,如果未传递参数的值(传入参数为空),则会使用默认值,如果指定了值,则会忽略默认值,使用传递的值。
语法:返回值类型 函数名 (参数 = 默认值) { }
int func(int a, int b = 10, int c = 20) { return a + b +c; } //1.如果某个位置参数有默认值,那么从这个位置往后,从左到右,必须有默认值 //2.如果函数声明有默认值,那么函数实现的时候就不能有默认参数 int func2(int a = 10, int b = 20); int func2(int a, int b) { return a + b; }
函数占位参数
c++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:返回值类型 函数名 (数据类型) { }
现阶段函数的占位参数一样不大,但后续会用到
//函数占位参数,占位参数也可以有默认参数 int func(int a, int) { cout<<"this is func"<<endl } int main() { func(10,10);//占位参数必须填补 return 0; }
函数重载
作用:使函数名可以相同,提高复用性
需满足条件:
- 在同一个作用域下
- 函数名相同
- 函数参数类型不同,或者个数不同,顺序不同
Tips:函数的返回值不能作为函数重载的条件
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(int b, double a){//顺序不同 cout<<"func(int b, double a)"<<endl; } int func(int b, double a){//错误的,虽然这里返回值类型为int与上面的void不同,但不能作为函数重载的条件 cout<<"func(int b, double a)"<<endl; }
函数重载的注意事项
//1.引用作为重载的条件 void func(int &a) //int &a = 10; 不合法 { cout<<"func(int &a)"<<endl; } void func(const int &a) { cout<<"func(const int &a)"<<endl;//const int &a = 10; 合法 } //2.函数重载遇到默认函数 void func2(int a, int b = 10) { cout<<"func(int a, int b = 10)"<<endl; } void func2(int a) { cout<<"func(int a)"<<endl; } int main() { int a = 10; func(a);//调用func(int &a) func(10);//调用func(const int &a) //内存空间分配的原因 func2(10);//此处代码报错 func2(10, 10)//代码不报错 //当函数重载遇到默认参数时会出现二义性(有歧义),有默认参数的函数尽量避免函数重载 return 0; }
分类:
学习笔记 / C++学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示