关键词

C++ this指针用法详解

在 C++ 类的成员函数内部,暗含着一个名字是 this 的指针,它指向的是调用当前成员函数的类对象。

举个简单的例子:
#include <iostream>
class MyClass {
public:
    void display() {
        printf("this 的值为 %p\n", this);
    };
};


int main() {
    MyClass a;
    a.display();
    printf("a 的地址为 %p\n", &a);
    return 0;
}
main() 函数中定义了一个 MyClass 类对象 a,它调用了 display() 成员函数,那么在 display() 函数的内容就隐含着一个 this 指针,它指向的就是 a 对象。

程序中分别输出 this 指针的值和 a 对象的地址,输出结果为:

this 的值为 00D9F8EF
a 的地址为 00D9F8EF

可以看到,this 指针中存储着 a 对象的地址,证明 this 指针指向的就是对象 a。

this 指针是编译器负责维护的,不需要显式地定义,可以直接使用,并且不需要担心这个指针的指向是否正确。

接下来通过一个完整的示例,给大家演示 this 指针的常见用法。

定义一个类 Ball,用这个类来描述一个小球的移动,因此这个 Ball 类需要提供几个移动的函数 moveLeft,moveRight,moveDown 和 moveUp。
// 定义一个 Ball 类,用于描述小球的状态和移动
class Ball {
public:
    // 构造函数,初始化小球的坐标
    Ball(int x = 0, int y = 0) : x(x), y(y) {}

    // 输出当前位置
    void displayPosition() {
        std::cout << "Ball is at (" << this->x << ", " << this->y << ")" << std::endl;
    }

    // 向左移动
    Ball& moveLeft(int step) {
        this->x -= step;
        return *this;
    }

    // 向右移动
    Ball& moveRight(int step) {
        this->x += step;
        return *this;
    }

    // 向下移动
    Ball& moveDown(int step) {
        this->y -= step;
        return *this;
    }

    // 向上移动
    Ball& moveUp(int step) {
        this->y += step;
        return *this;
    }
private:
    int x;  // x 坐标
    int y;  // y 坐标
};
实例中,this 指针用在以下两个位置:
  • 明确地访问成员变量:在各个成员函数内部,通过使用 this->x 和 this->y 明确地表明 x 和 y 是当前对象的成员变量。
  • 方法链式调用:在 moveLeft()、moveRight()、moveUp() 和 moveDown() 函数中,通过返回 *this(当前对象的引用),我们允许方法的链式调用。例如ball.moveLeft(2).moveUp(3);

总结

this 是一个指针,只限于在类的成员函数内部使用,它指向的是调用当前函数的类对象。

注意,静态成员函数是没有 this 指针的。此外,this 指针不允许被修改,它始终指向调用成员函数的对象。

this 指针在 C++ 编程中有着特定的用途和重要性,理解 this 指针的工作方式和使用场景能帮助我们更高效地编写代码。

本文链接:http://task.lmcjl.com/news/15863.html

展开阅读全文