this指针是一个const指针,它指向当前对象,通过它可以访问当前对象的所有成员。
#include<iostream>
#include<string>
using namespace std;
class Student{
public:
void setname(string name);
void setage(int age);
void setscore(float score);
void show();
private:
string name;
int age;
float score;
};
void Student::setname(string 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;
}
this只能用在类的内部,通过this可以访问类的所有成员,包括private, protected, public属性的。
上述例子中成员函数的参数和成员变量重名,只能通过this区分。
this虽然用在类的内部,但是只有在对象被创建以后才会给this赋值,并且赋值的编译器自动完成的,不需要用户干预。上述例子中this的值和pstu的值是相同的。
注意:
- this是const指针,它的值是不能被修改的。
- this只能在成员函数内部使用。
- 只有在对象被创建后this才有意义,因此不能在static成员函数中使用。
this到底是什么
this实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给this。不过this这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
this作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给this赋值。
注意:成员函数最终被编译成与对象无关的普通函数,除了成员变量,会丢失所以信息,所以编译时要在成员函数中添加一个额外的参数,把当前对象的首地址传入,以此来关联成员函数和成员变量。
这个额外的参数,就是this,它是成员函数和成员变量关联的桥梁。