我无法弄清楚我正在阅读的书的下半部分是什么。
//this function supposed to mimic the += operator
Sales_data& Sales_data::combine(const Sales_data &rhs)
{
units_sold += rhs.units_sold; // add the members of rhs into
revenue += rhs.revenue; // the members of ''this'' object
return *this; // return the object on which the function was called
}
int main()
{
//...sth sth
Sales_data total, trans;
//assuming both total and trans were also defined...
total.combine(trans);
//and here the book says:
//we do need to use this to access the object as a whole.
//Here the return statement dereferences this to obtain the object on which the
//function is executing. That is, for the call above, we return a reference to total.
//*** what does it mean "we return a reference to total" !?
}
我应该说我以前对C#有一些了解,并且不太了解return *this;
对整个对象的影响。
答案 0 :(得分:14)
该函数返回对与其自身相同的类型的引用,并返回...本身。
因为返回的类型是引用类型(Sales_data&
),而this
是指针类型(Sales_data*
),所以必须取消引用它,因此*this
,它实际上是对我们在上调用成员函数的对象的引用。
它真正允许的是方法链。
Sales_data total;
Sales_data a, b, c, d;
total.combine(a).combine(b).combine(c).combine(d);
它有时是纵向写的:
total
.combine(a)
.combine(b)
.combine(c)
.combine(d);
我很确定你已经看过它了:
cout << "Hello" << ' ' << "World!" << endl;
在上面的例子中,重载operator<<
返回对输出流的引用。
答案 1 :(得分:3)
在通话total.combine(trans);
中,调用Sales_data::combine(...)
函数,this
作为指向total
和rhs
的指针,作为对trans
的引用。由于this
是指向总计的指针,因此取消引用它只会导致total
变量。
然后,由于Sales_data::combine(...)
的返回签名为Sales_data &
,因此它会将引用返回给*this
;换句话说,引用total
。
答案 2 :(得分:3)
在这种情况下,返回对* this的引用可以链接像这样的函数调用
int main()
{
Sales_data total, trans;
//sth..
total.combine(trans1).combine(trans2);
//etc
}
通过返回引用,它意味着它返回对象的引用而不是副本。我会想象你正在阅读的书中有哪些参考文献的解释,但它也可以在网上找到很多地方。