C++函数提高
1.函数的默认参数
在C++中,函数的形参列表中的形参是可以有默认值的。
语法:返回值类型 函数名 (参数 = 默认值){}
#include<iostream>
using namespace std;
/*
函数的默认参数
如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值。
语法:返回值类型 函数名 (形参 = 默认值){}
注意事项:1.如果某个位置已经有了默认值,那么从这个位置往后,从左到右都必须有默认值
2.如果函数声明有默认参数,函数实现就不能有默认参数
*/
int func1(int a, int b = 20, int c = 10)
{
return a + b + c;
}
/*
1.如果某个位置已经有了默认值,那么从这个位置往后,从左到右都必须有默认值
int func2(int a, int b = 20, int c ) //默认实参不在形参列表结尾
{
return a + b + c;
}
*/
/*2.如果函数声明有默认参数,函数实现就不能有默认参数
声明和实现都只能有一个默认参数
int func3(int a = 10, int b = 20);
int func3(int a, int b )
{
return a + b ;
}
*/
int main()
{
cout << func1(10, 30) << endl;
system("pause");
return 0;
}
2.函数的占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:返回值类型 函数名(数据类型){ }
/*占位参数*/
//返回值类型 函数名 (数据类型){ }
//占位参数,还可以有默认参数
void func(int a,int)
{
cout << "this is funs" << endl;
}
int main()
{
func(10,10);
system("pause");
return 0;
}
3.函数重载(基本语法)
作用:函数名可以相同,提高复用性
函数重载满足条件:
1.同一个作用域下
2.函数名称相同
3.函数参数类型不同 或者 个数不同 或者 顺序不同
#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 main()
{
func();
func(10);
func(3.13);
func(2,3.13);
func(2.23 , 3);
system("pause");
return 0;
}
4.函数重载(注意事项)
引用作为重载条件
函数重载碰到函数默认参数
#include<iostream>
using namespace std;
/*
函数重载注意事项:
1.引用作为重载的条件
*/
void func(int &a) //int &a = 10;不合法
{
cout << "func(int &a) 的调用" << endl;
}
void func(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)的调用" << endl;
}
void func2(int a)
{
cout << "func2(int a)的调用" << endl;
}
int main()
{
// int a = 10;
// func(a);
// func(10);
func2(13); //当函数重载碰到默认参数,会出现二义性,报错,尽量避免出现此类情况
system("pause");
return 0;
}