0.函数的分文件编写
作用:让代码结构更清晰
份文件编写一般有四个步骤:
1.创建后缀为.h的头文件
2.创建后缀为.cpp的源文件
3.头文件写函数的声明 头文件里也要写入框架
4.源文件写函数的定义 源文件中要引用头文件 #include"xxx.h"
1.函数默认参数
在C++中,函数的形参列表中的形参是可以有默认值的。
语法:返回值类型 函数名(参数 = 默认值){} 例如:
int func(int a = 10);
如果某个位置参数有默认值,从这个位置往后,每个参数都必须有默认值。
int fun(int a, int b = 10, int c = 10);//正确
int fun(int a, int b = 10, int c);//错误
如果调用时有传入自己的数据,就用自己的数据,没有就用默认值。
如果函数声明有默认参数,函数的实现就不能有默认参数。
int fun(int a = 10, int b = 10);
int fun(int a = 10, int b = 20){
//错误
}
2.函数占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
语法: 返回值类型 函数名(数据类型){} 例如:
int fun(int){}
占位参数也可以有默认值。例如:
int fun(int = 10){}
3.函数重载
作用:函数名可以相同,提高复用性。
函数重载满足条件:同一个作用域,函数名称相同,函数参数类型不同或者个数不同或者顺序不同
函数的返回值不作为函数重载的条件。
引用作为重载的条件
void test(int &a){
cout<<"int &a"<<endl;
}
void test(const int &a){
cout<<"const int &a"<<endl;
}
int main(){
int a = 10;
test1(a);
test2(10);
}
当函数重载碰到默认参数,有可能出现二义性。 例如:
void test(int a){
cout<<"test1"<<endl;
}
void test(int a, int b=1){
cout<<"test2"<<endl;
}
int main(){
test(0);//出现二义性
}