由于C++中成员变量和成员函数是分开存储的,所以每一个非静态成员函数只会诞生一份函数实例,就是多个同类型的对象会共用一块代码,如果需要让一块代码调用自己,可以用到this指针,this是C++提供的特殊的对象指针,不需要定义。
this指针指向被调用的成员函数所属的对象
第一个用途:当形参和成员变量同名时,可以用this指针来区分
struct Member
{
Member(int score)
{
this->score=score; //this->成员变量 = 形参
}
int score;
};
int main()
{
Member n1(5);
cout<<n1.score<<endl; //5
}
当然如果形参和成员变量名字不一样时,也可以不使用this指针
第二个用途:在类的非静态成员函数中返回对象本身,可使用return *this
,用于链式编程
struct Member
{
Member(int score)
{
this->score=score;
}
Member& AddScore(Member& n)
//这里如果不使用&的话,返回的虽然也是一个对象,但是这个对象不是n1了,是临时创建出来的对象
{
this->score+=n.score;
return *this;
}
int score;
};
int main()
{
Member n1(5);
Member n2(100);
Member n3(30);
n1.AddScore(n2); //5+100=105
n1.AddScore(n2).AddScore(n3);//105+100+30=235
cout<<n1.score<<endl; //235
}
由于AddScore()函数返回的是一个对象,对这个对象取引用,则这个对象也就是n1
struct Member
{
Member(int score)
{
this->score=score;
}
Member AddScore(Member& n)
//这里没有使用引用,返回的虽然也是一个对象,但是这个对象不是n1了,是临时创建出来的对象
{
this->score+=n.score;
return *this;
}
int score;
};
int main()
{
Member n1(5);
Member n2(100);
Member n3(30);
n1.AddScore(n2); //5+100=105
n1.AddScore(n2).AddScore(n3);//105+100=205
cout<<n1.score<<endl; //205
}
由于AddScore()函数返回的是一个对象,但是没有引用,则这个对象也就不是n1了,而是临时创建出来的n1’,n1’中的AddScore()函数执行一次后返回的是n1’’