this指针的概念(2)

我们知道,C++中成员变量和成员函数是分开存储的,每一个非静态成员函数只会诞生份函数实例,也就是说多个同类型的对象会共用一块代码(汇编角度看)

那么问题是:这一块代码如何区分是哪个对象调用自己的呢?

 C++通过提供特殊的对象指针——this指针。可以解决上述的问题,this指针指向被调用成员函数的所属的对象。

这句话怎么理解呢?(每当我们创建一个对象的时候,编译器会自动提供一个this指针指向调用了类的成员函数的对象)

注意事项:

1.this指针是隐含在每一个非静态成员函数内的一种指针(也就是说静态成员函数内没有this指针)

2.this指针是不需要定义的,直接使用即可。

this指针的作用:

1.当形参和变量同名的时候,可用this指针来区分。

2.在类的非静态成员函数中返回对象本身,可使用return *this。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Person
 5 {
 6 public:
 7     Person(int age)
 8     {
 9     //this指针指向被调用成员函数所属的对象
10         this->age = age;
11     }
12 
13     Person& PersonAddPerson(Person &p) //引用返回
14     {
15         this->age += p.age;
16 
17         return *this;//因为持续的追加,需要返回p2对象本身
18     }
19 
20     int age;
21 };
22 
23 //1.解决名称冲突
24 void test_01(void)
25 {
26     Person p1(18);//this指向p1
27     cout << "p1的年龄" << p1.age << endl;
28 }
29 
30 //2.返回对象本身,用*this
31 void test_02(void)
32 {
33     Person p1(10);
34     Person p2(10);
35 
36     //如果想要实现年龄追加,需要修改被调成员函数的返回值
37     p2.PersonAddPerson(p1).PersonAddPerson(p1);//这种编程思想叫链式编程
38     cout << "p2的年龄 " << p2.age << endl;
39 }
40 
41 int main(void)
42 {
43     //test_01();
44     test_02();
45     system("pause");
46     return 0;
47 }

辨析:值返回和引用返回的细微差别。

1 Person PersonAddPerson(Person &p) //值返回
2     {
3         this->age += p.age;
4 
5         return *this;//因为持续的追加,需要返回p2对象本身
6   

值返回的时候,this->age = (p2.age + p1.age) + p1.age = 20;返回的*this只表示(p2.age + p1.age)中的p2.age ,因为this指向p2。

引用返回的时候,this->age = (p2.age + p1.age) + p1.age = 30;返回的*this表示(p2.age + p1.age)结果的地址。

posted @ 2020-04-14 15:38  坦率  阅读(446)  评论(0编辑  收藏  举报