C++ this指针

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,它是成员函数和成员变量关联的桥梁。

原文地址:https://www.cnblogs.com/xiaobaizzz/p/12348112.html