this指针,一篇给你说明白

this指针是编译器提供给我们的一个 隐藏的const 指针,是每一个成员函数必备的默认参数,它指向调用对象本身(指向实例),只是c++语法将他隐藏起来了。当对象(实例)调用成员函数时,都会把自己的地址当作this指针输入给成员函数

就当this是一个指向该类地址的指针就好了

因为 this 的目的总是指向“这个”对象,所以 this 是一个常量指针,我们不允许改变 this 中保存的地址,它的值不能被修改。

成员函数通过一个名为 this 的额外隐式参数来访问调用它的那个对象,当我们调用一个成员函数时,用请求该函数的对象地址初始化 this。例如,如果调用 total.isbn()则编译器负责把 total 的地址传递给 isbn 的隐式形参 this

在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无须通过成员访问运算符来做到这一点,因为 this 所指的正是这个对象。我们对类成员的直接访问都相当于使用了this的隐式引用,就像我们书写了 this->bookNo 一样。(没写,但是写了)

对于我们来说,this 形参是隐式定义的。实际上,任何自定义名为 this 的参数或变量的行为都是非法的。我们可以在成员函数体内部使用 this,这样可以明确地告诉编译器我们想要访问当前对象的成员变量,而不是函数参数或局部变量。

用法1:区分参数中的变量和类的变量

class MyClass
{
public:
    int x;
    void MyFunction(int x) {
        this->x = x;
    }
};

用法2:返回调用对象(实例)的地址

class MyClass
{
public:
    MyClass* function()
    {
        return this;
    }
};

注意,this 是一个指针,只能用在类的内部,要用->来访问所有成员变量或成员函数(包括 private、protected属性成员)。