您好我正在研究类,我有以下代码:
Sales_Data & Sales_Data::combine(const Sales_Data & rhs){
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this; }
我想知道为什么我们使用return *this
和Sales_Data &
。
答案 0 :(得分:7)
这样做可以在一个语句中运行多个组合:
Sales_Data d1, d2, d3;
d1.combine(d2).combine(d3);
答案 1 :(得分:6)
当您需要返回对自己的引用时,请执行此操作。您通常会在运算符重载中看到它,以便结果可以自行返回:
Foo &operator=(const Foo &rhs)
{
// Whatever...
return *this;
}
通过这样做,它可以让您轻松链接呼叫:
a=b=c;
然而,如果返回指针,它看起来会很乱。
它也常用于流体api设计,以便您可以组合呼叫。使用您的示例,您可以写:
Sales_Data x,y,z;
x.combine(y).combine(z);
然而,如果你的指针潜伏在周围,它会失去一点优雅:
Sales_Data *x=LoadSalesData();
Sales_Data y,z;
x->combine(y).combine(z);
答案 2 :(得分:3)
使用*this
返回对当前对象的引用。
这对于允许方法链接通常很有用:
rhs1.combine(rhs2).combine(rhs3);
一个众所周知的例子是流operator<<
,它返回对流对象的引用,以使输出连接成为可能。
std::cout << "first" << "second";