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
还有一些特点:
this
是const
指针,不能被修改,任何修改this
指针本身的行为都不可以this
只能在成员函数内部使用- 只有当对象被创建后
this
才有意义,因此不能再static
成员函数中使用