2-2this指针
“this指针”通俗版解释
1. 为什么需要this指针?
想象你有一个班级,每个学生(对象)都有自己的姓名和成绩(数据),但全班共用同一本教材(成员函数)。
- 老师提问时,教材里的答案要对应到具体学生。比如问“你的成绩是多少?”,教材需要知道当前问的是哪个学生。
- this指针就像老师手里的名单,告诉教材:“现在操作的是张三,下一个是李四”。
代码例子:
1 | class Student { |
2. this指针是什么?
- 隐藏的指针:每个成员函数(非静态)都有一个隐藏参数
this,指向调用该函数的对象。 - 自动传递:当你调用
a.g(1)时,编译器偷偷把&a传给this,函数内部通过this->x访问a.x。
编译器视角:
1 | // 你写的代码: |
3. 什么时候需要显式用this?
场景1:返回对象自己
比如实现链式调用:
1
2
3
4
5
6
7
8
9
10
11class Counter {
int count = 0;
public:
Counter& add() {
count++;
return *this; // 返回当前对象,支持连续调用
}
};
Counter c;
c.add().add().add(); // 连续加3次场景2:区分同名变量
当成员变量和参数同名时:
1
2
3
4
5
6
7class Dog {
string name;
public:
void setName(string name) {
this->name = name; // this->name是成员变量,name是参数
}
};
4. 用C语言模拟this指针
C语言没有类,但可以用结构体和函数模拟:
1 | // C++的类: |
5. 总结
- this指针的作用:告诉成员函数“当前操作的是哪个对象”。
- 自动传递:你不需要手动写
this,编译器帮你加。 - 显式使用场景:返回对象、区分同名变量、传递对象自身。
比喻:
- 类成员函数像一份公共菜谱,
this指针像厨师手里的食材,告诉菜谱:“现在炒的是这盘菜”。 - 没有
this,所有对象的数据会乱成一锅粥!