何时使用*this

When to use *this?

本文关键字:this 何时使      更新时间:2023-10-16

你好,我正在研究类,我有以下代码:

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

我想知道我们为什么使用return *thisSales_Data &

这样做,您可以在一条语句中运行多个联合收割机:

Sales_Data d1, d2, d3;
d1.combine(d2).combine(d3);

当需要返回对自己的引用时,可以执行此操作。您通常在运算符重载中看到它,因此结果可以返回自身:

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);

使用*this返回对当前对象的引用。

这通常有助于允许方法链接:

rhs1.combine(rhs2).combine(rhs3);

一个众所周知的例子是流的operator<<,它返回对流对象的引用,以使输出的级联成为可能。

std::cout << "first" << "second";