如果方法需要显式地引用调用它的对象,则可以使用this指针。由于
this指针被设置为调用对象的地址,因此*this是该对象的别名。
书本实例:
const Stock & Stock:: topval(const Stock & s) const
{
if(s. total val>total val)
return s; //argument object
else
return ?????; //invoking object
}
其中,s.total_val是作为参数传递的对象的总值,total_val是用来调用该
方法的对象的总值。如果s.total_val大于toatl_val,则函数将返回指向s的引
用;否则,将返回用来调用该方法的对象(在OOP中,是topval消息要发送给
的对象)。问题在于,如何称呼这个对象?如果调用stock1.topval(stock2),
则s是stock2的引用(即stock2的别名),但stock1没有别名。
C++解决这种问题的方法是:使用被称为this的特殊指针。this指针指向
用来调用成员函数的对象(this被作为隐藏参数传递给方法)。这样,函数调
用stock1.topval(stock2)将this设置为stock1对象的地址,使得这个指针可用
于topval( )方法。同样,函数调用stock2.topval(stock1)将this设置为stock2对
象的地址。一般来说,所有的类方法都将this指针设置为调用它的对象的地
址。确实,topval( )中的total_val只不过是this->total_val的简写(第4章使用->
运算符,通过指针来访问结构成员。这也适用于类成员)(参见图10.4)。