缺省:
c++的函数传参在c语言的的基础上还能缺省参数。c++的函数定义时能给变量赋值,当在main中调用函数时,可以按需求缺省变量,这时,被定义好的变量就像备胎一样弥补缺省的变量数据。其中半缺省(缺省部分参数)必须从右往左连续缺省。
void Func1(int a, int b, int c = 10) //半缺省(缺省部分参数)必须从右往左连续缺省
{
cout << "a=" << a << " " << "b=" << b << " " << "c=" << c << " " << endl;
}
int main()
{
Func1(2, 4);
return 0;
}
函数重载:
c++允许在同一个作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型或顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。(注意:返回值不同,不构成重载)
引用:给已存在的变量取别名,编译器不会给别名另开辟空间。引用不能没有初始化,可以给一个变量取多个别名。
/int a = 0;
//int& b = a;
①引用做参数的使用
在c语言中,例如想调用函数swap_cpp( )来交换两个值,那么得要传变量的地址,然后解引用才能改变数值。而在c++中,可以利用引用来解决,因为引用是给变量取别名,通过利用它的别名,那么它所指向的是同一个数值,别名的改变,原本的数据也会跟着改变。
void swap_cpp(int& aa, int& bb)
{
int tmp = aa;
aa = bb;
bb = tmp;
}
int main()
{
int a = 0, b = 1;
swap_cpp(a, b);
rerurn 0;
}
②引用做返回值
参数传值返回时实际是对返回值的拷贝,它是需要额外开辟拷贝空间的,而利用引用来发返回参数,实际是返回它别名,并不用额外开辟空间,因此会提高程序的运行效率。而值得注意的是,在利用引用时,如果返回变量出了这个作用域也被销毁,那么就很危险。就好比如下面的c,虽然它会跟随作用域被销毁,但是的它别名依旧存在,它会继续访问该区域,当再次调用该函数时,如果变量数值不同,它的返回值就会被覆盖。因此在用引用时要利用static来保护数据。
int& Add1(int a, int b)
{
static int c = a + b; //static 是在另一个地方开辟c的空间,避免函数结束后c跟着作用域被销毁
return c; //引用传参相当于 int& ret=c;的、返回的是c的别名, 如果是参数传值,是另开一个
//空间产生一个拷贝变量
}
int& Add2(int a, int b)
{
static int c = 1;
c = a + b;
return c;
}
int main()
{
int& ret1 = Add1(1, 2);
int& ret2 = Add2(1, 2);
Add1(10, 20);
Add2(10, 20);
cout << "Add1(1,2) is:" << ret1<< endl; // 3
cout << "Add2(1,2) is:" << ret2 << endl; //30
return 0;
}