我在C ++编程方面很陌生,很抱歉,如果这很愚蠢。我一直在研究c ++入门书,有些东西我无法理解。以此功能为例:
Sales_data& Sales_data::combine(const Sales_data &rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}
我们使用以下方法调用该函数:
total.combine(trans);
我知道销售的单位&总对象中的收入将与转换对象中的收入相结合,其工作方式与复合赋值运算符(+ =)非常相似。
我知道这将返回总对象,但我不知道返回总对象意味着什么......
答案 0 :(得分:9)
通过引用返回(对被调用的对象)意味着您可以在一个行代码中链接调用;所有这些调用都将绑定到同一个对象:
total.combine(trans).combine(trans2).combine(trans3);
等同于:
total.combine(trans);
total.combine(trans2);
total.combine(trans3);
(当然这并不意味着你必须调用相同的方法,你可以混合使用具有类似特征的其他方法。)
这个习惯用法经常用于operator=
,operator<<
,operator>>
等运算符的实现,这些运算符也可以通过链接调用:
a = b = c;
cout << a << b << c;
答案 1 :(得分:7)
它返回对自身的引用,这允许方法链接。
例如,假设您有2个Sales_data
个对象,并且您想要将它们组合在一起,那么您可以&#34;链接&#34;电话:
Sales_data s1, s2, total;
//stuff..
total.combine(s1).combine(s2);
因为你返回一个引用,这允许在两次调用之间修改total
对象,这就是为什么它被称为&#34;链&#34;。
答案 2 :(得分:3)
在此示例中,您将返回对total
的引用,这允许我们将表达式total.combine(trans)
用作已更改的total
对象。
例如,如果operator<<
的{{1}}超载,我们可以简单地组合并打印更改后的总数:
Sales_data
或者我们可以链接方法,如果我们想要为同一个对象组合多次,就像这样:
std::cout << total.combine(trans);
在此示例中,total.combine(trans).combine(trans1);
被组合,并返回相同的total
对象,我们可以再次与已更改的对象组合。
当您需要在同一表达式中使用更改的对象时,这是简化代码的好模式。
答案 3 :(得分:3)
您的上述示例使用&amp;课后的参考符号。这允许您使用* this传回对现有类对象的引用。所有返回引用意味着您正在返回指向堆栈上对象的指针。这在语法上对于菊花链调用非常有用。
total