随笔 - 6  文章 - 0 评论 - 0 阅读 - 294
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

this指针

this指针是一个const指针,指向当前对象,通过this可以访问当前对象的所有成员,无论是protect/private/public

以下是一个示例:

#include <iostream>

class stu {
    public:
    void setA(int A);
    void setB(int B);
    void print();
    
    private:
    int A, B;
};

void stu::setA(int A) {
    this->A = A;
}

void stu::setB(int B) {
    this->B = B;
}

void stu::print() {
    std::cout << "A = " << this->A << ' ' << "B = " << this->B << std::endl;
}

int main() {
    stu *s = new stu;
    s->setA(10);
    s->setB(9);
    s->print();
}

由于例子中成员变量和成员函数的参数重名,因此不能使用A=A这样进行赋值,使用this->A可避免这样的情况。

this指针指向当前对象,且对于不同的对象,this的值各不相同:

#include <iostream>

class stu {
    public:
    void setA(int A);
    void setB(int B);
    void print_this();
    
    private:
    int A, B;
};

void stu::setA(int A) {
    this->A = A;
}

void stu::setB(int B) {
    this->B = B;
}

void stu::print_this() {
    std::cout << this << std::endl;
}

int main() {
    stu *s = new stu;
    s->setA(10);
    s->setB(9);
    s->print_this();
    std::cout << s << std::endl;

    stu *t = new stu;
    t->setA(10);
    t->setB(9);
    t->print_this();
    std::cout << t << std::endl;
}

输出结果如下:

0x141e05e70
0x141e05e70
0x141e05e10
0x141e05e10

可以发现this确实指向当前对象,且不同对象this值不同。

综上,this还有一些特点:

  • thisconst指针,不能被修改,任何修改this指针本身的行为都不可以
  • this只能在成员函数内部使用
  • 只有当对象被创建后this才有意义,因此不能再static成员函数中使用
posted on   lgats324  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示