this指针的本质
- this指针本身是一个成员函数的形参,相当于Python中的self。在调用成员函数时将对象的地址作为实参传递给 this。
- this形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
- this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。
this指针的用途
- this指针是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
- 只有在对象创建后,this指针才有意义。
- this指针不需要定义,直接使用即可。但只能在类内的非静态成员函数中使用(静态的成员并不属于对象,不和对象关联)。
- 当形参和成员变量同名时,可以使用this指针进行区分。
- 当想返回对象本身时,可以用*this返回。
this指针区分成员变量和形参
- 当成员变量和形参同名时,为了区分二者,要么使用不同的名称,要么对成员变量使用this指针进行区分。
- 可以将成员变量命名为m_age, m: member的缩写。
code:
#include<iostream>
using namespace std;
class Person
{
public:
int age = 18;
Person(int age)
{
this->age = age;
}
};
void main()
{
Person p1(22);
cout << p1.age << endl;
system("pause");
};
result:
22
this作为成员函数返回值
- 假设成员变量要实现不断地自加,可以使用链式编程思想,可以不断追加。
- 当返回对象本身,并且以引用方式返回时,就是一直对该对象进行操作。
code:
#include<iostream>
using namespace std;
class Person
{
public:
int m_age = 18;
Person(int age)
{
m_age = age;
}
Person& age_plus(Person p1)
{
m_age += p1.m_age;
return *this;
}
Person age_plus_1(Person p1)
{
m_age += p1.m_age;
return *this;
}
};
void main()
{
Person p1(100);
Person p2(p1);
Person p3(p1);
cout << p2.m_age << endl;
p2.age_plus(p1).age_plus(p1).age_plus(p1);
cout << p2.m_age << endl;
p3.age_plus_1(p1).age_plus_1(p1).age_plus_1(p1);
cout << p3.m_age << endl;
system("pause");
};
result:
100
400
200