缺省、函数重载、引用

缺省:

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值