在成员函数中返回类对象意味着什么
What does it mean to return a class object in a member function?
我是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);
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 评估对象的创建意味着什么?
- 函数上的关键字'const'意味着对象字段完全只读?
- 在成员函数中返回类对象意味着什么
- 作为一个对象存储在内存中意味着什么
- 超出作用域在c++对象中意味着什么
- 面向对象编程意味着只使用对象吗?
- 在C++中:常量引用意味着"read-only view of"还是需要被引用对象的不可变性?