2016-03-27 9 views
0

私は、オーバーロードされた - =演算子を持つ境界矩形を表すクラスを持っており、両方の矩形の交差を取得します。何の交差点がありません場合は、私はエラーをスロー:例外と演算子のオーバーロード

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

はなぜ空の交差点は例外だろうか? – ZDF

+0

Beacuse交差点がないことを何らかの方法で伝える必要があります – Domnyk

+0

' - =' "矩形の交差を取得するのはなぜですか?"オペレータの過負荷に注意してください。 https://en.wikipedia.org/wiki/Principle_of_least_astonishment –

答えて

0

をそれは正しく、詳細に、要件を知らなくても、あなたの質問に応答することは不可能です。

私の2セント。

operator-=通常(左)オブジェクトを変更します。 operator-は通常それをしません。

だから私はそれは私が意味する、この(Rectは、クラスの名前、コピーコンストラクタが存在していることと仮定して)

Rect operator- (Rect const & r1, Rect const & r2) 
{ return Rect(r1)-r2; } 

ような何かを行うより良いと思う:私はあなたがoperator-から投げるべきだと思いますけど(交差の場合)は、左のオペランドが変更されていない新しいオブジェクトを返します。

p.s .:申し訳ありませんが、私の悪い英語です。

0

ここで間違った方向に向かっています。コードを管理している唯一の人でも、演算子のオーバーロードの基本ルールに従ってください。

特に、-で左の値を変更しないでください。-=の場合にのみ、これはクラスのユーザーにとってはまったく予期しないものになります。

あなたはむしろ矩形が交差する場合は述べ方法を提供する必要があります。

class Rectangle 
{ 
    bool Intersects(Rectangle other) 
    { 
     /* ... */ 
    } 
}; 
+0

"単純な' -'が処理されても例外はありません。 このルールの追加の、尊敬できる情報源を与えてもらえますか? – Toreno96

+0

あなたはそうです、これは実際に私の答えでは非常に曖昧な文章です。私はこれを打つ。しかし、 '-'演算子の中で左の値を変更することは、クラスのユーザーにとってはまったく予期せぬことであり、私の主な関心事です。 – bytecode77

+0

したがって、演算子から例外をスローすることについてのルールはありません。 – Toreno96

関連する問題