教程 cpp tutorial

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++ 代码是非常重要的。