【发布时间】:2015-07-21 03:09:10
【问题描述】:
friend Fraction operator=(const Fraction &newfraction) {
Fraction changedfraction;
changedfraction.numerator = newfraction.numerator;
changedfraction.denominator = newfraction.denominator;
changedfraction.simplify(changedfraction.numerator,
changedfraction.denominator);
return (changedfraction);
}
【问题讨论】:
-
什么错误?。
-
这是赋值运算符的非正统版本。赋值运算符应该只做一件事和一件事,那就是创建传入对象的副本到现有对象。它不应该执行“业务逻辑”,例如
simplify。 -
@PaulMcKenzie:我不同意。如果我们假设
simplify不会在语义上改变被分配的“值”,只是优化它的表示,那么调用它是绝对可以的。这更像是std::string在swap上削减其容量。它不是“业务逻辑”(讨厌这个词!)。 OP 函数的真正问题是它是一个非成员operator=只接受一个操作数,甚至没有尝试将任何东西分配给应该是 LHS 操作数的东西。