this指针是隐含每一个非静态成员函数内的一种指针
this指针不需要定义,直接使用即可
成员函数和成员变量是分开存储的
每一个非静态成员函数只会诞生一分函数实例,也就是说多个同类型的对象会共用一块代码
那么问题来了:这一块代码是如何区分哪个对象调用自己的呢?
C++通过特殊的对象指针“this”指针,解决上述问题,this指针指向被调用的成员函数所属的对象(谁调用它,this就指向谁)
this指针的用途:
1.当形参和成员变量同名时,可用this指针来区分
2.在类的非静态成员函数中返回对象本身,可使用return*this,注意此时函数返回的类型是该类的引用,如:Point& (Point是定义的类名);
#include "pch.h"
#include <iostream>
using namespace std;
//解决名称冲突,当形参和成员变量同名时,可用this指针来区分
class person {
public:
//构造函数
person(int age) {
//age = age;//这样写是错误的,名称发生冲突
this->age = age;//这样写是正确的,this指针指向被调用的成员函数所属的对象(谁调用它,this就指向谁)
}
//成员函数.在类的非静态成员函数中返回对象本身,可使用return*this
person& personaddage(person &p) {
//因为是返回对象本身,所以前面是person而不是void等这种类型的,用引用的方式
this->age += p.age;
return *this;//this指向p2的指针,而*this指向的就是p2这个对象本体,用person的引用返回本体
}
int age;
};
void test01() {
//person p;//当上面写了构造函数。则不能直接这样写,会显示报错:不存在默认构造函数,因为上面写了有参构造
person p(10);
cout << "age =" << p.age << endl;
}
void test02() {
person p1(10);
person p2(10);
p2.personaddage(p1);
p2.personaddage(p1).personaddage(p1).personaddage(p1);
cout << "p2=" << p2.age << endl;
}
int main()
{
test01();
}