this指针的深刻认识
知识回顾:
- 在C++中,类内成员变量和成员函数分开存储
- 只有非静态成员变量才属于类的对象上(非静态成员函数不属于)
- 空对象对占用一个字节的内存空间
每一个非静态成员函数指挥诞生一份函数实例,也就是说多个通信类的对象会共同使用一份代码
问题来了:这一块代码如何区分是哪个对象在调用自己呢?
C++机制中提供了一种特殊的对象指针-this指针,用于解决上诉问题。
关于this指针:
- this指针指向被调用的成员函数所属的对象
- this指针是隐含在每一个非静态成员函数中的一种特殊对象指针
- this指针不需要定义,直接使用即可
this指针的用途:
- 当形参和成员变量同名时,可以用this指针来区分
- 在类的非静态成员函数中返回对象本身,可以使用 return *this
示例:
#include<iostream>
using namespace std;
#include<string>
//成员变量和成员函数分开存储
class Student
{
public:
Student()
{
}
Student(int age)
{
//age = age; //此时默认这三个age是同一个,但不是成员变量age
//this指针指向被调用的成员函数所属的对象
this->age = age;
}
Student& studentAdd(PersonStudent &s)
{
this->age += s.age;
//this指向s2的指针,而*this指向的就是s2这个对象的本体
return *this;
}
int age;
};
//1.解决名称冲突
void test01()
{
Student s(18);
cout << "s的年龄:" << s.age << endl;
}
//2.返回对象本身用*this
void test02()
{
Student s1(10);
Student s2(10);
s2.studentAdd(s1);
//链式编程思想
s2.studentAdd(s1).studentAdd(s1);
cout << "s2的年龄:" << s2.age << endl;
}
int main()
{
test02();
system("pause");
return 0;
}
如有问题,可在评论区讨论哦