1. 缺省参数
缺省参数的分类:全缺省,半缺省
缺省参数是声明或定义函数时为函数的参数指定一个缺省值
在调用该函数时,若没有指定实参则采用该形参的缺省值
否则使用指定的实参
void Func(int a = 0)
{
cout<<a<<endl;
}
int main()
{
Func(); // 没有传参时,使用参数的默认值
Func(10); // 传参时,使用指定的实参
return 0;
}
1.1 缺省参数分类
-
全缺省参数
void Func(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
这里面我们要注意我们传参时是从左到右挨着给的值,
Fun(15,25);这样传参的话我们c的默认值就是30
注意:传参不能写成这样的形式
Func(,25,);
Func(,,35);
Func(,25,35);
Func(15,,35);
-
缺省参数
void Func(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
只要有参数没有给缺省值那么它就是半缺省的
注意:
半缺省参数必须
从右往左
依次来给出,不能间隔着给缺省参数不能在函数声明和定义中同时出现
缺省值必须是
常量
或者全局变量
2. 函数重载
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
2.1参数类型不同
// 1、参数类型不同
int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}
2.2参数个数不同
void f()
{
cout << "f()" << endl;
}
void f(int a)
{
cout << "f(int a)" << endl;
}
2.3参数类型顺序不同
// 3、参数类型顺序不同
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}
注意:返回值不同不能构成函数重载
3. C程序为什么不支持函数重载?
在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接
- 预处理阶段:主要内容:头文件展开,宏替换条件编译,去掉注释
- 编译阶段:主要内容:语法检查和生成汇编代码
- 汇编阶段:主要内容:形成符号表,将汇编代码转换成二进制码以便机器能够读懂
- 链接过程:合并段表;符号表的合并和符号表的重定义
链接过程:.o的目标文件会合并到一起其次还需找一些只给了声明的函数的函数地址
而每一个.o文件都有一个符号表符号表中存放函数的地址
当main文件要调用这个函数时会去符号表中找函数的地址
而符号表中两个func函数的地址
编译器不知道应该调用哪个
所以c程序不支持函数重载