C++的this指针相当于Python中的self,
主要看一下下面这段代码:
#includeusing 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'(相当于只传了值,却换了个对象,有点形参和实参的区别那味,也有点拷贝构造函数那味)
参看下面这段代码也可以发现,以值传递的方式返回局部对象只是反悔了其副本



