c++学习笔记

c++ this 指针

2020-07-12  本文已影响0人  檀香静雪

概念

this指针是c++程序中的一个关键字,this指向当前对象,通过this指针可以访问当前对象的所有成员。

this 只能用在类的内部,通过 this 可以访问类的所有成员,包括 privateprotectedpublic 属性的成员。

所谓的当前对象指的是当前所使用的对象,下面我们通过一个例子来看this指针的作用。

例子

class Complex {
private:
    double real, imag;
public:
    Complex(double real, double imag) {
        this->real = real;
        this->imag = imag;
    }
};

在上面的复数类中,我们有一个构造函数,其作用是给realimag赋值。其参数表中的参数名与成员变量名一致,在赋值时我们就会写成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指针指向的就是当前所使用的对象。

上一篇下一篇

猜你喜欢

热点阅读