面向对象----函数
1.函数的默认参数
注意:
- 形参某一处有默认值时,其右边所有形参都需要有默认值
- 函数声明和函数实现,只能有一个带默认参数,防止出现歧义
- 传参时,优先级:输入的数据>默认值
示例:
//错误写法:int func(int a = 10, int b )
//形参某一处有默认值时,其右边所有形参都需要有默认值
//传参时,优先级:输入的数据>默认值
int func(int a = 10, int b = 10)
{
return a + b;
}
int main()
{
int a = 20, b = 20;
cout << func(a, b) << endl;
}
//输出结果为40
2.函数的占位参数
C++中函数的形参列表里可以出现占位参数,在函数调用时,必须填补该位置。
语法:返回值类型 函数名(数据类型)
示例:
void func(int a,int)
{
cout<<"Hello World!"<<endl;
}
int main()
{
func(10,10);//占位参数必须填补
}
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 main()
{
func();//func() 的调用
func(24);//func(int a) 的调用
func(8.24);//func(double a) 的调用
func(6,4.04);//func(int a,double b) 的调用
func(6.15,4);//func(double a,int b) 的调用
}
4.函数重载–注意事项
- 无法重载仅以返回值类型区分的函数
- 引用作为重载条件
- 函数重载碰到默认参数
示例:
//无法重载仅以返回值类型区分的函数
void func()
{
cout<<"func() 的调用"<<endl;
}
int func()
{
cout<<"func() 的调用"<<endl;
}
//引用作为重载条件
void func(int &a)
{
cout<<"func(int &a) 的调用"<<endl;
}
void func(const int &a)
{
cout<<"func(const int &a) 的调用"<<endl;
}
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();//出现歧义,编译器会报错
func(a);//变量是可读可写的,调用func(int &a),因为不能给引用赋值一个常量。
func(10);//常量是可读不可写的,调用func(const int &a)
//func2(10);出现歧义,编译器会报错
}