C++ 引用 【再谈返回值问题】

本文通过一个具体的C++示例讲解了this指针的作用及如何正确设置成员函数的返回值。演示了直接返回对象与返回引用的区别,并解释了这两种方式对连续调用同一成员函数的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码:

class Person
{
public:

	Person(int age)
	{
		//1、当形参和成员变量同名时,可用this指针来区分
		this->age = age;
	}

	Person PersonAddPerson(Person p)
	{
		this->age += p.age;
		//返回对象本身
		return *this;
	}

	int age;
};

 我们运行:

    Person p(10);
	Person p2(15);
	p2.PersonAddPerson(p).PersonAddPerson(p);
	cout << p2.age;

答案是25.

一起看一看函数执行过程:

首先,p2调用了PersonAddPerson(p)这个函数,

在调用过程中,p2自己让自己的年龄加上了p的年龄,变成了25;

因为我们还需要在用一次.符号来调用这个函数,

所以返回值必须是一个Person类型。

那么此时,p2.PersonAddPerson(p),就作为了一个左值Person,我们称它为P3,他和P2有着完全一样的年龄,但是他是P2的一份拷贝。

再进行函数调用时,就是P3来调用了。

也就是说,调用两次后,那个虚拟的P3的值变成了35,然后又复制了一份变成35后的P3,出现了一个P4。

所以此时P2的值还是25.

要解决这个问题,我们需要将返回值变成引用类型:

Person& PersonAddPerson(Person p)
	{
		this->age += p.age;
		//返回对象本身
		return *this;
	}

这样每一次返回的就是P2了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值