C++中的this和*this
this指针
首先,this
指针的使用范围是在类里面,因为类的成员函数可以访问类的数据,那么当我们一个成员函数传进去是一个类的时候,this
指针就可以很明显的区分我们操作的是那一个数据了。
看一个例子:
我们建一个类A,里面有一个int
的成员变量,还有一个compare
成员函数,传入一个类A,比较他们成员变量的大小。
class A{
public:
A(int d)
{
this->data = d;
}
bool compare(A a)
{
return this.data > a.data;
}
private:
int data;
}
这样子我们就可以区分传入类和本类了。
值得注意的是,this
指针不能用于静态函数和全局函数,因为静态函数表示整个类范围上的信息,而this
指针却是表示一个实在的类,所以在静态函数上使用this
指针会出错哦。
*this是什么?
*表示的解引用,那么*this
就很好理解了,就是指针的内容,即对象本身。那他的用途是在哪呢?
还是上面的例子,我们增加一个返回数据的函数:
int getData()
{
return (*this).data;
//return this->data; 作用一致
}
我们的*this
就可以像对象一样,使用.
操作符了。
还有一个用途就是可以把几个操作放在一个序列里。
我们新建一个setData
函数重新设置data值,返回本身。在新建一个printData
类去打印data:
A setData(int s)
{
this->data = s;
return *this;
}
void printData()
{
printf("data = %d",this->data);
}
我们在main函数中可以这样使用:
int main()
{
A a(20);
a.setData(10).printData();
}
这样我们可以把设置data值和打印函数放在同一条序列上了。