this指针是C++中的一个特殊指针,它指向当前对象的地址。在C++中,每个对象都有一个隐藏的指向自身的this指针,可以在对象的成员函数中使用。
特别注意:this指针指向被调用的成员函数所属的对象。(谁调用this指针,this指针就指向谁)
this指针是隐含每一个非静态成员函数内的一种指针
this指针不需要定义,直接使用
编译器中this指针的用const修饰的,this指针本身是不能被修改的,但是内容是可以修改的,并且我们可以使用。
this指针的用途
1.当形参和成员变量同名时,可用this指针来区分
2.在类的非静态成员函数中返回对象本身,可使用return *this,要注意函数返回类型需不需要加&
下面实例帮助大家加深理解,不理解的记得留言哦。
#include<iostream>
using namespace std;
//this指针的用法和作用
class Person
{
public:
Person(int age)
{
//解决名称冲突
//age = age; 错误
this->age = age;
}
/*修改前
void PersonAdd(Person &p)
{
this->age += p.age;
}*/
Person& PersonAdd(Person& p)
//用Person&而不是Person
//因为Person&返回的是p2本体
//用Person的话系统会调用拷贝构造函数,创建一个新的对象返回,这样p2只能加一次
//后面的加到新对象上去了(每次调用都是创建新对象返回)
{
this->age += p.age;
//p2此时调用了this指针,则this指针指向的就是p2
//*this就是p2本身
return *this;
}
int age;
};
void test()
{
Person p(6);//p调用的有参构造,this指针指向p
cout << "p的年龄为:" << p.age << endl;
}
void test2()
{
Person p1(10);
Person p2(30);
cout << "p2的年龄为:" << p2.age << endl;
p2.PersonAdd(p1);//将p1的年龄加到p2上
cout << "p2的年龄增加为:" << p2.age << endl;
//p2.PersonAdd(p1).PersonAdd(p1).PersonAdd(p1).PersonAdd(p1);
// cout << "p2的年龄增加为:" << p2.age << endl;
//如果我们使用链式编程,让p2加上4个p1的年龄就会报错
//解决上述方法需要更改PersonAdd()函数的返回值
p2.PersonAdd(p1).PersonAdd(p1).PersonAdd(p1).PersonAdd(p1);
cout << "p2的年龄增加为:" << p2.age << endl;
}
int main()
{
test();
test2();
return 0;
}
需要注意的是在静态成员函数中是没有 this
指针的,因为静态成员不依赖于任何特定的对象实例。
希望你们生活愉快。