this指针概念
我们知道在C++中成员变量和成员函数是分开存储的
每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码
那么问题是:这一块代码是如何区分那个对象调用自己的呢?
c++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象
this指针是隐含每一个非静态成员函数内的一种指针
this指针不需要定义,直接使用即可
this指针的用途:
- 当形参和成员变量同名时,可用this指针来区分
- 在类的非静态成员函数中返回对象本身,可使用return *this
class Person
{
public:
Person(int age)
{
//1、当形参和成员变量同名时,可用this指针来区分
this->age = age;
}
Person& PersonAddPerson(Person p)
{
this->age += p.age;
//返回对象本身
return *this;
}
int age;
};
void test01()
{
Person p1(10);
cout << "p1.age = " << p1.age << endl;
Person p2(10);
p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);
cout << "p2.age = " << p2.age << endl;
}
int main() {
test01();
system("pause");
return 0;
}
前菜结束,套娃上桌:
class AAA
{
public:
AAA(int aaa)
{
this->aaa = aaa;
}
//返回类对象指针
AAA* taowa(AAA a)
{
this->aaa += a.aaa;
cout<<"taowa "<<this->aaa<<endl;
return this;
}
//返回类对象
AAA& taowa2(AAA a)
{
this->aaa += a.aaa;
cout<<"taowa2 "<<this->aaa<<endl;
return *this;
}
//返回值,会调用拷贝函数,每次都是新的,每次都拷贝传进来的参数a
AAA taowa3(AAA a)
{
this->aaa += a.aaa;
cout<<"taowa3 "<<this->aaa<<endl;
return *this;
}
int aaa;
};
int main()
{
AAA aaa(0);
AAA aaa2(0);
AAA aaa3(0);
AAA bbb(10);
//返回的是类对象指针,那么每次运行完 aaa.taowa(bbb) 得到的都是类对象aaa的指针,可以用箭头 ->继续调用方法
//而且指针的话每次都是aaa本体,没有拷贝,所以能累加
aaa.taowa(bbb)->taowa(bbb)->taowa(bbb)->taowa(bbb)->taowa(bbb);
cout<<"aaa's aaa "<<aaa.aaa<<endl;
cout<<endl;
//返回的是类对象,那么每次运行完 aaa.taowa2(bbb) 得到的都是类对象本体,可以用点 . 继续调用方法
//而且返回的是引用,就是aaa2本体,所以能累加
aaa2.taowa2(bbb).taowa2(bbb).taowa2(bbb).taowa2(bbb).taowa2(bbb);
cout<<"aaa2's aaa "<<aaa.aaa<<endl;
cout<<endl;
//返回的是值,只有第一次运行的时候是加到了aaa3的aaa上了,后面再加的都是加到所拷贝的AAA对象上了
//这里等于是匿名的对象,也找不着
//每次运行完 aaa3.taowa3(bbb) 返回的时候就会拷贝一个新的 AAA,然后新的AAA对象再调用.taowa3(bbb),完了
//再返回再拷贝,循环几次就拷贝几次,换了几次地址
aaa3.taowa3(bbb).taowa3(bbb).taowa3(bbb).taowa3(bbb).taowa3(bbb);
//这时候我们打印一下aaa3的aaa值,会发现aaa3的值只有10,仅做了第一次的运算
cout<<"aaa3's aaa "<<aaa3.aaa<<endl;
return 0;
}