4. this 指针

this 指针是 C++ 成员函数内,指向调用对象地址的指针。在成员函数内部优先访问局部变量,然后才是成员变量。在成员函数如果存在同名的局部变量和成员变量,此时如果需要确切的访问成员变量,此时需要使用 this 指针显示的使用成员变量或成员函数。

作用

this 指针通常用来明确指示某个标识符是成员变量或成员函数,不是局部变量或全局变量。

关键字

this

说明:

C++ 的每个成员函数都有一个 this 指针指向调用此函数的对象(默认成员函数的第一个参数就是 this 指针,只不过 C++ 的语法隐藏了 this 指针(第一个参数));

使用 this 指针重新编写 class Rectangle 类示例

// filename: this_pointer.cpp
#include <iostream>
#include <stdio.h>

using namespace std;

class Rectangle {
    public:
        void set_width_height(int width, int height) {
            printf("this --> %p\n", this);
            // 注意此处形参和成员变量的名字相同,需要使用 this 指针区分。
            this->width = width, this->height = height;
        }
        int get_area(void) {
            return this->width * this->height;
        }
        int get_length(void) {
            return  (this->width + this->height) * 2;
        }
    private:
        int width;
        int height;
};

int main(int argc, char * argv[]) {
    Rectangle r1;
    printf("&r1 --> %p\n", &r1);

    r1.set_width_height(10, 2);
    cout << "r1的周长:" << r1.get_length() << endl;
    cout << "r1的面积:" << r1.get_area() << endl;

    return 0;
}

编译和运行结果如下

weimz@mzstudio:~$ g++ -o this_pointer this_pointer.cpp
weimz@mzstudio:~$ ./this_pointer 
&r1 --> 0x7fff59230b80
this --> 0x7fff59230b80
r1的周长:24
r1的面积:20

练习

编写代码,尝试使用 this 指针。