this指针:
- this是C++中的一个关键字,
- 也是一个const指针,它指向当前对象,通过它可以访问当前对象的所有成员。
- 所谓当前对象,是指正在使用的对象。例如对于stu.show();,stu 就是当前对象,this 就指向 stu。
示例:
#include <iostream>
using namespace std;
class Student{
public:
void setname(char *name);
void setage(int age);
void setscore(float score);
void show();
private:
char *name;
int age;
float score;
};
void Student::setname(char *name){
this->name = name;
}
void Student::setage(int age){
this->age = age;
}
void Student::setscore(float score){
this->score = score;
}
void Student::show(){
cout<<this->name<<"的年龄是"<<this->age<<",成绩是"<<this->score<<endl;
}
int main(){
Student *pstu = new Student;
pstu -> setname("李华");
pstu -> setage(16);
pstu -> setscore(96.5);
pstu -> show();
return 0;
}
运行结果:
李华的年龄是16,成绩是96.5
注意:
- this 只能用在类的内部,通过 this 可以访问类的所有成员,包括 private、protected、public 属性的。
- this 是一个指针,要用->来访问成员变量或成员函数
- this 虽然用在类的内部,但是只有在对象被创建以后才会给 this 赋值,并且这个赋值的过程是编译器自动完成的,不需要用户干预,用户也不能显式地给 this 赋值。
证明:创建对象,this赋值,this就指向这个对象
void Student::printThis(){
cout<<this<<endl;
}
Student *pstu1 = new Student;
pstu1 -> printThis();
cout<<pstu1<<endl;
Student *pstu2 = new Student;
pstu2 -> printThis();
cout<<pstu2<<endl;
运行结果:
0x7b17d8
0x7b17d8
0x7b17f0
0x7b17f0
可以发现,this 确实指向了当前对象,而且对于不同的对象,this 的值也不一样。
总结:
- this 是 const 指针,它的值是不能被修改的,一切企图修改该指针的操作,如赋值、递增、递减等都是不允许的。
- this 只能在成员函数内部使用,用在其他地方没有意义,也是非法的。
- 只有当对象被创建后 this 才有意义,因此不能在 static 成员函数中使用。【静态成员函数不需要创建对象就能使用】
本质:
- this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
- this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。
this指针的使用
当类的成员变量和函数的局部变量(参数)同名的时候,会采用就近原则,优先使用局部变量,也就是参数,如果需要访问本类中的成员变量,那就需要用到-> this.成员变量名字
谁调用的含有this的方法谁就是这个this,
因为this一定是写在方法里面的,这个方法一定会有对象去调用的,那么这个对象就是这个this。this就是在重名的情况下起到分别的效果。