重载+ =具有多个术语的运算符

时间:2017-06-27 19:45:18

标签: c++ c++11

我有两个类,一个分子和一个带有重载运算符+ =,+和*的single_atom类。 +只要两个操作数是分子或原子就可以工作。 *适用于原子或分子和int,可以反转。 + =仅在操作数是单个分子或原子时起作用,但应该能够使复杂的表达式扩散。如何合并+ =以便以下工作:

single_atom a1("sulpher");
single_atom a2("mercury");
Molecule m1(a1);
m1 += 3 * a1 + a2 * 4;

甚至只是:

m1 += 3 * a1;

1 个答案:

答案 0 :(得分:0)

整个右侧需要适当地允许临时,例如

3 * a1

需要

single_atom single_atom::operator*(int value) const;

然后,这将返回single_atom&&,您可以将其传递到下一个操作。这将一直持续到最后你有+=的重载,看起来像是

single_atom& single_atom::operator+=(single_atom&& rhs)