在成员函数中返回类对象意味着什么

What does it mean to return a class object in a member function?

本文关键字:对象 意味着 什么 返回 成员 函数      更新时间:2023-10-16

我是C 编程的新手,对不起,如果这很愚蠢。我一直在浏览C 底漆书,而且我无法透露自己的头脑。以此功能为例:

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

,我们使用:

调用该函数
total.combine(trans);

我明白了卖出的单位&总对象的收入将与trans对象中的收入合并,就像复合分配运算符( =)一样工作。

我知道这会返回总体对象,但是我不明白返回的总体含义...

通过参考返回(到被调用的对象)返回意味着您可以将呼叫链接为一个行代码;所有这些调用都将绑定到同一对象:

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;

它返回对自身的引用,这允许方法链接。例如,假设您有2个 Sales_data对象,并且要组合两个对象,然后可以"链"呼叫:

Sales_data s1, s2, total;
//stuff..
total.combine(s1).combine(s2);

因为您返回参考,因此可以在呼叫之间修改total对象,这就是为什么它称为"链"。

在此示例中,您返回对total的引用,该引用使我们可以将表达式total.combine(trans)用作更改的total对象。

例如,如果operator<<Sales_data重载,我们可以像这样简单地组合和打印。

std::cout << total.combine(trans);

,或者我们可以链接方法,如果我们要为同一对象组合多次,例如:

total.combine(trans).combine(trans1);

在此示例中,total合并,并返回相同的total对象,我们可以再次将其与已更改的对象结合在一起。

当您需要在同一表达式中使用更改的对象时,这是简化代码的好模式。

您的上面示例使用&amp;班级后的参考符号。这使您可以使用 *this来传递对现有类对象的引用。所有返回参考都意味着您正在返回堆栈上对象的指针。这对于族依然链接而言是有用的。

total.combine(trans).combine(trans2).combine(trans3);