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属性成员)。