在成员函数中返回类对象是什么意思?

时间:2016-11-30 15:04:01

标签: c++ reference return

我在C ++编程方面很陌生,很抱歉,如果这很愚蠢。我一直在研究c ++入门书,有些东西我无法理解。以此功能为例:

Sales_data& Sales_data::combine(const Sales_data &rhs)
{
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}

我们使用以下方法调用该函数:

total.combine(trans);

我知道销售的单位&总对象中的收入将与转换对象中的收入相结合,其工作方式与复合赋值运算符(+ =)非常相似。

我知道这将返回总对象,但我不知道返回总对象意味着什么......

4 个答案:

答案 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