我有一个表示带有重载 - =运算符的边界矩形的类,它获取两个矩形的交集。如果没有交叉点,我会抛出一个错误:
if(/* no intersection */)
{
throw std::runtime_error("No intersection between rectangles");
}
我的问题是:如果我使用-
实现-=
运算符,我应该在其中使用try / catch吗?
我应该这样做:
operator-(rect1, rect2)
{
try
{
rect1 -= rect2;
}
catch( std::exception &e)
{
...
}
return rect1;
}
或者这个
operator-(rect1, rect2)
{
rect1 -= rect2;
return rect1;
}
答案 0 :(得分:0)
如果不详细了解要求,就无法正确回答您的问题。
我的2美分。
operator-=
通常修改(左)对象; operator-
通常不会。
所以我认为最好做这样的事情(假设Rect
是类的名称并且存在复制构造函数)
Rect operator- (Rect const & r1, Rect const & r2)
{ return Rect(r1)-r2; }
我的意思是:我认为你应该从operator-
抛出但是(在交叉的情况下)返回一个新对象,而不是修改左操作数。
p.s:抱歉我的英语不好。
答案 1 :(得分:0)
你正走向错误的方向。即使你是维护代码的唯一人,你仍然应该遵循操作符重载的一些基本规则。
特别是,不应在-
上修改左侧值,仅在-=
上修改,因为这对于该类用户来说完全出乎意料。
您应该提供一种方法来说明矩形是否相交:
class Rectangle
{
bool Intersects(Rectangle other)
{
/* ... */
}
};