11.4 This指针
需要定义一个成员函数,比较两个Stock变量中哪个的变量的total_val最大,并返回total_val最大的Stock对象
11.4.1 显式访问对象和隐式访问对象
const Stock & topval(const Stock & s) const;
括号中的const表明,该函数不会修改被显式地访问的对象;括号后的const表明,该函数不会修改被隐式地访问的对象。由于该函数返回了两个const对象之一的引用,因此返回类型也应为const引用。
top = stock1.topval(stock2);
top = stock2.topval(stock1);
11.4.2 this
当在返回值时,有这样一个问题:如何称呼那个调用成员函数的对象?stock1.topval(stock2), s是stock2的别名,但是没有stock1的别名。
针对上述问题:C++解决方案为:使用被称为this的特殊指针。this指针指向用来调用成员函数的对象。
一般来说,所有的类方法都将this指针设置为调用它的对象的地址。确实,topval()中的total_val只不过是this->total_val的缩写。
每个成员函数(包括构造函数和析构函数)都有一个this指针。this指针指向调用对象。如果方法需要引用整个调用对象,则可以使用表达式*this。在函数的括号后面使用const限定符将this限定为const,这样将不能使用this来修改对象的值。然而,要返回的并不是this,因为this是对象的地址,对象本身为 *this(将接触引用运算符 * 用于指针,将得到指针指向的值)。
因此,该函数可以写成这样:
const Stock & Stock::topval(const Stock & s) const
{
if(s.total_val > total_val)
return s; // argument object
else
return *this; // invoking object
}