概念
this
指针是c++程序中的一个关键字,this
指向当前对象,通过this
指针可以访问当前对象的所有成员。
this
只能用在类的内部,通过 this
可以访问类的所有成员,包括 private
、protected
、public
属性的成员。
所谓的当前对象指的是当前所使用的对象,下面我们通过一个例子来看this
指针的作用。
例子
class Complex {
private:
double real, imag;
public:
Complex(double real, double imag) {
this->real = real;
this->imag = imag;
}
};
在上面的复数类中,我们有一个构造函数,其作用是给real
和imag
赋值。其参数表中的参数名与成员变量名一致,在赋值时我们就会写成real = real;
以及imag = imag
,这样我们看不出到底是谁给谁赋值。
这时我们就可以用到this
指针,将上面的式子写成this->real = real;
,这样,就不难看出是用形参表的real
给成员变量real
赋值。
需要注意的是,this
是一个指针,要用->
来访问成员变量或成员函数。
验证this指针
我们修改上面的代码如下:
class Complex {
private:
double real, imag;
public:
Complex(double r, double i) {
this->real = r;//等价于real = r
this->imag = i;//等价于imag = i
printf("this:%p\n", this);
}
};
int main() {
Complex c1(2, 3);
printf("c1:%p\n", &c1);
Complex c2(5, 6);
printf("c2:%p\n", &c2);
return 0;
}
在构造函数中,我们使用printf
函数输出this
指针的值,同时,在main
函数里,我们打印出c1
以及c2
的值。
运行上面的程序,可以得到如下所示结果:
this:00000037490FF8A0
c1:00000037490FF8A0
this:00000037490FF8B0
c2:00000037490FF8B0
我们可以看到,构造c1
时所用到的this
指针地址与直接输出的c1
的地址相同,都是00000037490FF8A0
,对于c2
也是同理。
我们可以得出结论,this
指针指向的就是当前所使用的对象。