【发布时间】:2021-08-03 05:13:35
【问题描述】:
我有一个类,我想为它重载加法运算符。对于我的用例,只有在每个对象的 a 变量相等的情况下才允许添加才有意义。
处理不适用的情况的最佳方法是什么?抛出异常,还有什么?
class A {
private:
int a, b;
public:
A(int a, int b)
:a(a), b(b) {}
A& operator+=(const A& rhs) {
if (this->a == rhs.a) {
this->b += rhs.b;
return *this;
}
else { //this->a != rhs.a
//what should I put here?
}
}
};
.
编辑:
这些对象是在文件 io 运行时创建的。
这些对象代表频谱中的一个数据点。仅当两个数据点位于同一位置时,将它们的强度相加才有意义。
a 仅限于范围(-180.0, 360.0)
【问题讨论】:
-
在这种情况下抛出可能是有意义的,因为将正确的类型传递给运算符似乎是类用户的责任。
-
抛出异常,或者改变用例。
-
让
a成为模板变量怎么样?然后可以在编译时检查它。此外,这个用例并不简单。为什么+=只能在某些状态下工作? -
理想情况下,非法状态应该是不可代表的。在您的情况下,
a可能是模板参数而不是成员变量。 -
a值是否有限制范围?