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

被折叠的 条评论
为什么被折叠?



