【C++基础二】缺省参数和函数重载
- 1.缺省参数
- 1.1全缺省
- 1.2半缺省
- 2.什么是函数重载
- 3.不同类型的函数重载
- 4.为什么C++支持函数重载而C语言不支持
1.缺省参数
缺省参数是声明或定义函数时,为函数的参数指定一个缺省值,在调用该函数时,若没有指定的实参,则采用该形参的缺省值,否则使用指定的实参
1.1全缺省
全缺省:函数的所有参数都给缺省值
void Func(int a = 10, int b = 20, int c = 30)
{//。。。。。。
}
调用全缺省参数的四种方式:
- 不传参:
Func();
a = 10 , b = 20 , c = 30
- 只传一个参数:
Func(1);
a = 1 , b = 20 , c = 30
- 传两个参数:
Func(1,2);
a = 1 , b = 2 , c = 30
- 传三个参数:
Func(1,2,3);
a = 1 , b = 2 , c = 3
注:
传参只能依次传参 ,不能写成以下形式:
Func(,2,);
Func(,,3);
Func(,2,3);
Func(1,,3);
1.2半缺省
半缺省:有参数没给缺省值,那它就是半缺省的
void Func(int a, int b = 2, int c = 3)
{//。。。。。。
}
- 半缺省参数必须从右往左依次来给出,不能间隔着给
- 缺省参数不能在函数声明和定义中同时出现(一般在函数声明时给缺省参数)
- 缺省值必须是常量或者全局变量
//这样都是不行的,缺省值的右侧参数必须都有缺省值
void Func1(int a=1,int b,int c);
void Func2(int a,int b=2,int c);
2.什么是函数重载
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 / 类型 / 类型顺序)不同,常用来处理实现功能类似但数据类型不同的情况
void Func(int i,char c) //函数1
{//...
}void Func(char c,int i) //函数2
{//...
}
两个Func函数虽然重名,但可以同时存在,并且两个Func函数是不同的函数
3.不同类型的函数重载
- 参数类型不同:
int Add(int L, int R)
{return L + R;
}double Add(double L, double R)
{return L + R;
}
- 参数个数不同:
void Func()
{cout << "f()" << endl;
}void Func(int a)
{cout << "f(int a)" << endl;
}
- 参数类型的顺序不同:
void Func(int i,char c)
{cout << "共赴重霄九九难" << endl;
}void Func(char c,int i)
{cout << "得人再书十十回" << endl;
}
不是函数重载的情况:
参数类型相同,数量相同,类型顺序相同
只有返回值不同的情况下不属于函数重载
short Add(short x,short y)
{return x + y;
}int Add(short x,short y)
{return x + y;
}
只有函数名不同,也不属于函数重载
void fun(int i, int ch)
{}void fun(int ch, int i)
{}
4.为什么C++支持函数重载而C语言不支持
打开LInux,创建一个test.c文件,vim
进去按i
插入内容如下,esc键退出插入模式,同时按shift和:键,在输入wq
保存并退出
void Func(int a,int b)
{}int main()
{return 0;
}
输入指令:gcc test.c -o mybin
生成可执行C语言程序mybin
再输入指令:objdump -S mybin
即可查看以下mybin程序的汇编语言
可以看到C语言执行程序时,是按照函数本名去寻找Func函数
删掉mybin程序,输入指令g++ test.c -o mybin
重新将test.c变成可执行**C++**程序
再输入指令:objdump -S mybin
即可查看以下mybin程序的汇编语言
可以看到<_Z4Funcii>中,4是函数名长度,ii分别是是函数两个参数的类型缩写,C++是通过这样蕴含信息的名字来寻找函数的,所以能使用函数重载