C++ this指针

在 C++ 中,this 是一个指向对象自身的指针。这个关键字在类的非静态成员函数中使用,可以访问当前对象的成员。

一、以下是一些关于 this 关键字的重要信息:

1、成员函数中的 this:在类的非静态成员函数中,this 指针被用作对调用对象的引用。例如,如果你有一个名为 MyClass 的类,并在这个类的成员函数中调用 this,那么 this 就会指向调用这个成员函数的 MyClass 对象。

2、this 的类型this 的类型依赖于它所在的类。如果 this 在一个名为 MyClass 的类中,那么 this 的类型就是 MyClass* const。这表示 this 是一个指向 MyClass 的常量指针

3、在构造函数和析构函数中使用 this:在类的构造函数和析构函数中,this 指针被用来指向正在被构造或析构的对象。在构造函数中,this 可以被用来检查对象是否已经被正确初始化。在析构函数中,this 可以被用来释放对象可能拥有的资源。

4、this 解决名称冲突:在成员函数中,如果成员变量和函数的参数或局部变量有相同的名称,可以通过 this 指针解决命名冲突。

class MyClass {
  private:
    int value;

  public:
    // 使用 this 指针解决名称冲突
    void setValue(int value) {
        this->value = value;
    }

    int getValue() {
        return this->value;  // 使用 this 指针访问类的成员变量
    }

    // 在成员函数中比较对象
    bool isEqual(MyClass& other) {
        if (this == &other) {
            return true;
        } else {
            return false;
        }
    }
};

在上述代码中,setValuegetValue 函数使用 this 指针来访问类的 value 成员。isEqual 函数比较 this 指针和另一个对象的地址,以确定它们是否是同一个对象。

二、*this

*this 是对 this 指针进行解引用的结果。由于 this 是一个指向当前对象的指针,因此 *this 就表示当前对象本身

在类的成员函数中,你可以使用 *this 来返回当前对象。这在链式调用中特别有用,当一个成员函数需要返回调用它的对象时,可以返回 *this

例如,假设你有一个 Vector 类,并且你想要创建一个 add 成员函数,该函数可以将一个 Vector 对象添加到另一个 Vector 对象,并返回结果。你可以这样做:

class Vector {
private:
    int x;
    int y;

public:
    Vector(int x, int y) : x(x), y(y) {}

    // Add another Vector to this Vector
    Vector& add(const Vector& other) {
        this->x += other.x;
        this->y += other.y;
        return *this;  // Return the updated Vector
    }
};

在上面的代码中,add 函数返回 *this,这意味着它返回了当前对象(即调用 add 函数的 Vector 对象)。这使得你可以进行链式调用,像这样:

Vector v1(1, 2);
Vector v2(3, 4);
Vector v3(5, 6);

// You can chain calls to 'add'
v1.add(v2).add(v3);

在上面的代码中,v1.add(v2) 的结果是 v1 对象本身,这意味着你可以立即在结果上调用 add(v3)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值