# this 指针

URL: https://caijiao.org/cpp/oop/this
Source: docs/cpp/oop/this.md
Description: 本节介绍 C++ 中的 'this' 指针。'this' 指针是每个非静态成员函数自动传递的指针，指向当前对象的地址。它可以用于访问对象的成员，尤其是在区分成员变量和参数时非常有用。

在 C++ 中，`this` 指针是一个隐式传递给每个非静态成员函数的指针，它指向当前对象的内存地址。`this` 指针的类型是 `class_name*`，即指向当前对象的指针。使用 `this` 指针可以访问当前对象的成员变量和成员函数，尤其是在对象的成员和函数参数重名时，`this` 指针非常有用。

## `this` 指针的特性

- **自动传递**：每个非静态成员函数都有一个隐式的 `this` 指针，指向调用该函数的对象。
- **只读指针**：`this` 是一个常量指针（`const`），不能修改其指向的对象。
- **不可用于静态成员函数**：静态成员函数没有 `this` 指针，因为它们不属于任何特定的对象，而是属于类本身。

## `this` 指针的用途

1. **区分成员变量和参数**：当成员变量和函数参数同名时，可以使用 `this` 指针来区分它们。
2. **返回当前对象的引用**：在成员函数中返回 `*this` 可以实现方法链式调用。
3. **在成员函数中访问当前对象**：`this` 指针可以帮助在类的成员函数内部明确引用当前对象。

## 示例：`this` 指针的使用

### 1. 区分成员变量和参数

当成员变量和函数参数同名时，`this` 指针可以帮助区分它们：

```cpp
#include <iostream>
using namespace std;

class Box {
private:
    int length;

public:
    Box(int length) {
        this->length = length;  // 使用 this 指针区分成员变量和参数
    }

    void printLength() {
        cout << "Length: " << this->length << endl;
    }
};

int main() {
    Box box(10);
    box.printLength();  // 输出：Length: 10
    return 0;
}
````

### 输出：

```
Length: 10
```

在这个例子中，`length` 是成员变量，而 `length` 也是构造函数的参数。为了区分这两者，`this->length` 访问成员变量，而 `length` 访问函数参数。

### 2. 返回当前对象的引用

`this` 指针常用于返回当前对象的引用，从而实现链式调用：

```cpp
#include <iostream>
using namespace std;

class Box {
private:
    int length;

public:
    Box(int length) {
        this->length = length;
    }

    Box& setLength(int length) {
        this->length = length;
        return *this;  // 返回当前对象的引用
    }

    void printLength() {
        cout << "Length: " << this->length << endl;
    }
};

int main() {
    Box box(10);
    box.setLength(20).printLength();  // 输出：Length: 20
    return 0;
}
```

### 输出：

```
Length: 20
```

在上面的例子中，`setLength` 函数返回当前对象的引用，这使得我们能够将多个成员函数调用链接在一起。

## `this` 指针的注意事项

* **不可改变指向**：`this` 指针是一个常量指针，不能修改其指向的对象。例如，不能执行 `this = &anotherObject;`。
* **指向当前对象**：`this` 指针总是指向调用成员函数的当前对象，即使是通过引用或指针传递给函数时，它也始终指向该对象。

## 总结

* `this` 指针是一个隐式传递给每个非静态成员函数的指针，指向当前对象。
* 它在成员函数内部非常有用，特别是在区分成员变量和参数时。
* `this` 是常量指针，不能更改其指向的对象，但可以通过它访问当前对象的成员。

理解并正确使用 `this` 指针，对于编写清晰、易维护的 C++ 代码是非常重要的。
