C++知识:this 指针详解

每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

注意:友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。

示例代码 :

#include <iostream>
using namespace std;

class Array
{
public:
    Array(int Len = 0) : Len(Len) { cout << "Array()" << endl; }
    ~Array() { cout << "~Array()" << endl; }
    void setLen(int Len) { this->Len = Len; }
    int getLen() { return Len; }
    void print() {cout << "Len = " << Len << endl;}
private:
    int Len;
};

void stackInstantiation()
{
    Array arr1(5);
    Array arr2;
    arr2.setLen(7);
    arr1.print();
    arr2.print();
}

int main()
{
    stackInstantiation();
    return 0;
}

运行结果:

  • 当参数名称与数据成员名称相同时可使用 this 指针区分。
  • 当参数名称与数据成员名称相同时可使用初始化列表,如示例代码 中 Point 类。
  • 以上两种方式可以区分参数和成员函数,但建议不要起相同的名称。

示例代码

#include <iostream>
using namespace std;

class Array
{
public:
    Array(int Len = 0) : Len(Len) { cout << "Array()" << endl; }
    ~Array() { cout << "~Array()" << endl; }
    // Array *setLen(int Len) {
    //     this->Len = Len;
    //     return this;
    // }
    Array &setLen(int Len) {
        this->Len = Len;
        return *this;
    }
    int getLen() { return Len; }
    void print() {
        cout << "Len = " << Len << endl;
    }
private:
    int Len;
};

void stackInstantiation()
{
    Array arr1(5);
    arr1.print();
    arr1.setLen(7).print();
}

int main()
{
    stackInstantiation();
    return 0;
}

运行结果:

  • 返回对象指针或者引用时的成员函数可以连续访问。
  • 引用返回 *this 而指针返回 this。

示例代码

void stackInstantiation()
{
    Array arr1(5);
    cout << "this addr: " << arr1.setLen(7) << endl;
    cout << "obj addr: " << &arr1 << endl;
    Array arr2(3);
    cout << "this addr: " << arr2.setLen(6) << endl;
    cout << "obj addr: " << &arr2 << endl;
}

运行结果:

  • this 指针就是对象本身的指针。
  • 相同类型不同对象 this 指针指向不同的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值