this指针——指向成员函数所作用的对象
class Complex
{
public:
double real, imag;
void Print()
{
cout << real << "." << imag;
}
Complex(double r, double i) : real(r), imag(i)
{
}
Complex AddOne()
{
this->real++; //等价于real++
this->Print(); //等价于print
return *this;
}
};
int main()
{
Complex c1(1, 1), c2(0, 0);
c2 = c1.AddOne(); //c1的AddOne()调用时,this指针指向c1的real,因此c1.AddOne()调用后,实部为2虚部为1,统统赋值给c2
return 0;
}
//程序输出 2.1,因为调用了一次Print()函数。
- 下面两张图展示了不同情况下main函数中空指针的调用情况。
-
可以看出,空指针指向成员函数时,如果这个成员函数里面没有使用this指针,那么就可以正常运行;反之则不行。
- this是空指针,指向i一定会出错,可能会导致程序崩溃。
this指针的一些注意事项
- 静态成员函数不可以使用this指针。因为静态成员函数并不具体作用于某个对象,而是独立存在的。 (静态成员函数真实的参数个数,就是程序中写出的参数个数)