如成员变量和成员函数内存分配所述,成员变量和成员函数分开存储,每一个非静态成员函数的实例只有一份,则多个同类型的对象都会访问同一份成员函数代码。问题来了,
这份成员函数代码如何区分是哪一个对象访问呢?
解决方法:C++编译器通过提供特殊对象指针,this指针;this指针指向被调用的成员函数所属的对象。
this指针特性:
1,this指针是隐含每一个非静态成员函数内的一种指针。
2,this指针不需要定义,直接使用即可。
this指针用途
1,形参与成员函数变量名一样时,可通过this指针区分
2,在类的非静态成员函数中返回对象本身,可用return *this。
#include <iostream>
#include <string>
using namespace std;
class Person{
public:
Person(int num)
{
//区分参数和成员变量一样的情况
this->num = num; //this指针指向被调用的成员函数所属的对象
}
Person addNum(const Person &p)
{
this->num += p.num;
return *this; //返回所指向的对象
}
int num;
};
void test01()
{
Person p1(18);
cout << "p1.num = " << p1.num << endl;
}
void test02()
{
Person p1(18);
Person p2(20);
p2.addNum(p1).addNum(p1);
cout << "p2.num = " << p2.num << endl;
//cout << "p3.num = " << p3.num << endl;
}
int main(void)
{
//实例化 创建对象
//test01();
test02();
system("pause");
return 0;
}