3函数提高
3.1函数默认参数
在C++中,函数的形参列表中形参是可以有默认值的
语法:返回值类型 函数名 (参数 = 默认值){}
#include<iostream> using namespace std; //函数的默认参数 //如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值 //语法: 返回值类型 函数名(形参 = 默认值){} int func(int a, int b=20 ,int c=30) { return a+b+c; } //注意事项 //1、如果某个位置已经有了默认参数。,那么从这个位置往后,从左往右都必须有默认值 //int func2(int a=10,int b,int c,int d) //{ // return a+b+c; //} //2、如果函数声明有默认参数,函数实现就不能有默认参数 //声明和实现只能有一个有默认参数 int func3(int a=10,int b=10); int func3(int a,int b) { return a+b; } int main() { //cout <<func(10,30)<<endl;// cout<<func3(10,10)<<endl; system("pause"); return 0; }
运行效果如图
3.2函数占位参数
c++中参数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:返回值类型 函数名(数据类型){}
在现阶段函数的占位参数存在意义不大,但是后面的课程会用到该技术。
#include<iostream> using namespace std; //占位参数 //返回值类型 函数名(数据类型){} //在现阶段函数的占位参数存在意义不大,但是后面的课程会用到该技术。 void func(int a,int) { cout<<"this is func"<<endl; } //占位参数 还可以有默认参数 void func2(int a,int=10) { cout<<"this is func2"<<endl; } int main(){ func(10,10);// func2(10);//占位参数 还可以有默认参数 system("pause"); return 0; }
运行效果如图
3.3函数重载
3.3.1 函数重载概述
作用:函数名可以相同,提高复用性
函数重载满足条件
-
同一个作用域下
-
函数名称相同
-
函数参数类型不同或者个数不同或者顺序不同
注意:函数的返回值不可以作为函数重载的条件
示例:
#include<iostream> using namespace std; //函数重载 //可以让函数名相同,提高复用性 //函数重载的满足条件 //1、同一个作用域下//现在是在全局作用域 //2、函数名称相同 //3、函数参数类型不同,或者个数不同,或者顺序不同 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; }
结果如图:
3.3.2函数重载注意事项
-
引用作为重载条件
-
函数重载碰到函数默认函数
示例
#include<iostream> using namespace std; //函数重载的注意事项 //1、引用作为重载的条件 void fun(int &a)//int &a=10;false :不合法的 { cout<<"func(int &a)调用"<<endl; } void fun(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是可读可写的 function(10);//调用有const的函数,因为10是只可以读的数据 // func2(10);//当函数重载碰到默认参数,出现二义性,报错,尽量避免这种情况出现 func2(10,20); system("pause"); return 0; }
效果如图
欢迎大家与我私信交流~