概念
1.定义
this 指针是只能在 class 、 struct 或类型的非静态成员函数内访问的指针 union,其隐含于每一个非静态成员函数中。
2.实质
1.对象的 this 指针不是对象本身的组成部分,因此它不会在对象的语句结果中反映出来 sizeof 。
2.this 指针指向为其调用成员函数的对象,且其作用域是在类内部.
3.this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this, 当为某个对象调用非静态成员函数时,编译器会将该对象的地址作为隐藏参数传递给该函数。
例:
myDate.setMonth( 3 );
setMonth( &myDate, 3 );
//二者所表达的含义一样
用途
1.当形参和成员变量同名时,只可以用this指针来区分。
eg:
class Student
{
public:
Student(int age)
{
age = age;
}
int age;
}
此时我们这个学生类中成员函数的参数和成员变量重名,如果写作age = age;这样的语句,就是给形参age赋值,而不是给成员变量age赋值,因此我们需this指针来区分:
this->age = age;
此时我们便是给成员变量age赋值,另外this 是一个指针,要用->来访问成员变量或成员函数。
2.在类的非静态成员函数中返回对象本身。
return *this;通常用于从成员函数返回当前对象。
eg:
Student& StudentAdd(Student &s)
{
this->age = s.age;
return *this;
}
3.this 指针还可用于防止自引用
eg:
if (&Object != this) {
}
注意:
1.this 是 const 指针,它的值是不能被修改的,一切企图修改该指针的操作,如赋值、递增、递减等都是不允许的。
2.对象的地址在成员函数内作为 this 指针提供。 大多数 this 指针使用都是隐式的。 虽然不必要,但 this 在引用的成员时使用显式是合法的 class 。 例如:
void Date::setMonth( int mn )
{
month = mn; // These three statements
this->month = mn; // are equivalent
(*this).month = mn;
}
3.c++中空指针也可以调用成员函数,但在使用前需先判断this指针的有无。