3.1 函数默认参数
定义:在C++中,函数的形参列表中的形参是可以有默认值的。
语法:返回值类型 函数名 (参数=默认值){}
注意:
(1)如果某个位置已经有了默认参数,那么从这个位置往后,必须要有默认参数
(2)如果函数声明有默认参数,函数实现就不能有默认参数,声明和实现只能有一个有默认参数
#include <iostream>
using namespace std;
//在C++中,函数的形参列表中的形参是可以有默认值的。
//语法:返回值类型 函数名 (参数=默认值){}
int func(int a , int b = 2,int c=32)
{
return a + b+c;
}
//注意:
//(1)如果某个位置已经有了默认参数,那么从这个位置往后,必须要有默认参数
//int func1(int a, int b = 10, int c)//b往后都需要有默认参数
//{
// return a + b + c;
//}
//(2)如果函数声明有默认参数,函数实现就不能有默认参数:声明和实现只能有一个有默认参数
int func2(int a=0, int b = 10);
int func2(int a, int b)
{
return a + b;
}
int main()
{
//如果传入自己的数据,就用自己的数据,如果没有,那就使用默认值
int r=func(20);
cout << "结果为:" << r << endl;
int r = func(20);
cout << "结果为:" << r << endl;
}
2 函数占位参数
定义:C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
语法:返回值类型 函数名 (数据类型){}
#include <iostream>
using namespace std;
//占位参数
//返回值类型 函数名(数据类型)
void func(int a, int)//int是占位的,调用函数时必须传入数据
{
cout<<"这是函数func"<<endl;
}
//占位参数,在目前用不到,后续会使用
//占位参数,还可以有默认值
int main()
{
func(20,20);
}
3 函数重载
3.1 函数重载概述
作用:函数名可以相同,提高复用性
函数重载满足条件:
(1)同一个作用域下
(2)函数名称相同
(3)函数参数:类型不同,或者个数不同或者顺序不同
注意:函数的返回值不可以作为函数重载的条件
#include <iostream>
using namespace std;
//函数重载:可以让函数名相同,提高复用性
//函数重载的满足条件:
//1.同一个作用域下
//2.函数名相同
//3.函数的参数:类型不同,个数不同,或顺序不同
void func(int a, double b)
{
cout << "函数func(int a, double b)" << endl;
}
void func(int a)//参数个数不同
{
cout << "函数func(int a)" << endl;
}
void func(double a,double b)//参数类型不同
{
cout << "函数func(double a,double b)" << endl;
}
void func(double a, int b)//参数顺序不同
{
cout << "函数func(double a, int b))" << endl;
}
int main()
{
func(20);//调用第二个函数
func(20, 20.2);//调用第一个函数
func(20.1, 20.2);//调用第三个函数
func(20.1, 20);//调用第四个函数
}
3.2 函数重载注意事项
注意:
(1)引用作为重载条件
(2)函数重载遇到函数默认参数:编译器可能不知道调用哪个函数,出现二义性(尽量避免)
#include <iostream>
using namespace std;
//函数重载:可以让函数名相同,提高复用性
//函数重载的注意事项:
//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)" << endl;
}
void func2(int a)
{
cout << "函数func2(int a)" << endl;
}
int main()
{
int a = 10;
func(a);//调用func(int &a)函数
func(10);//调用func(const int & a)函数
}