C++的this指针相当于Python中的self,
主要看一下下面这段代码:
#include<iostream>
using namespace std;
class Person
{
public:
Person(int age)
{
this->age = age;
}
Person &PersonAddPerson(Person p)//这里不加&55行加完第一次就变成另一个对象了(返回的只是p的副本(拷贝构造的以值的方式返回局部对象,看下拷贝函数的调用时机那一节)(传值)),所以结果不能累计,所以为20
{
this->age += p.age;
return *this;
}
int age;
};
void test01()
{
Person p1(10);
cout << "p1.age = " << p1.age << endl;
Person p2(10);
p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);//链式编程思想
cout << "p2.age = " << p2.age << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
主要难点:
1、成员函数PersonAddPerson返回的是*this
2、其函数名前有一个&
3、加&和去掉&导致p2.age的结果不同
自己的理解:
1、this指针指向对象,而*this指针解引用就代表这个对象,所以我们使用p2.PersonAddPerson(p1)返回的结果就是*this也就是p2对象
2、函数名前加一个&意思是返回引用类型,具体可以看(3条消息) C++中函数名字前的&或*_流楚丶格念的博客-CSDN博客_c++ 函数&
看下面这段代码就明白了:
3、不加&的话PersonAddPerson函数的返回值是以值得类型返回局部对象,只是返回了一个副本相当于返回p2'(相当于只传了值,却换了个对象,有点形参和实参的区别那味,也有点拷贝构造函数那味)
参看下面这段代码也可以发现,以值传递的方式返回局部对象只是反悔了其副本