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 2024-03-25 14:40  lgats324  阅读(7)  评论(0)    收藏  举报