说我想覆盖operator =
所以我可以做类似的事情
Poly p1; // an object representing a polynomial Poly p2; // another object of the same type p2 = p1; // assigns all the contents of p1 to p2
然后在我的实现中operator =
,我有这样的事情:
Poly& Poly::operator=(const Poly &source) { // Skipping implementation, it already works fine… return *this; }
不介意实现,它已经正常工作.
我关心的是你什么时候会发生什么return *this
?我知道它返回对象的引用,但这是怎么回事?
p2 = &p1
Paul Evans.. 16
您return *this
可以编写正常的复合C++ =
语句,如:
Poly p1; //an object representing a polynomial Poly p2; Poly p2; // ... p3 = p2 = p1; //assigns all the contents of p1 to p2 and then to p3
因为该陈述基本上是:
p3.operator=(p2.operator=(p1));
如果p2.operator=(...)
没有,return *this
你没有任何意义可以传递进去p3.operator=(...)
.
您return *this
可以编写正常的复合C++ =
语句,如:
Poly p1; //an object representing a polynomial Poly p2; Poly p2; // ... p3 = p2 = p1; //assigns all the contents of p1 to p2 and then to p3
因为该陈述基本上是:
p3.operator=(p2.operator=(p1));
如果p2.operator=(...)
没有,return *this
你没有任何意义可以传递进去p3.operator=(...)
.
p2 = p1
是一个简写p2.operator=(p1)
.它只是调用你的operator=
函数,它返回一个引用p2
,然后你忽略它.为了说明这一点,让我们把它assign
代替operator=
:
Poly& Poly::assign(const Poly &source) { . . . return *this; }
而不是p2 = p1
,你会写
p2.assign(p1);
在这种情况下,调用的结果将assign
被忽略,但您不必忽略它.例如,你可以写:
p3.assign(p2.assign(p1));
使用operator=
而不是assign
,这变成了
p3 = (p2 = p1);
但由于赋值是右关联的,因此也可以写成
p3 = p2 = p1;
这种能够一次完成多个赋值的形式最初来自C,并且通过返回的约定保存在C++ *this
中operator=()
.