-1
bool operator < (Time obj_a, Time obj_b)
{
 return ((obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes) &&  
 (obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes));
}
bool operator > (Time obj_a, Time obj_b)
{
 return (obj_a.hours>=obj_b.hours || obj_a.minutes>=obj_b.minutes);
}
bool operator == (Time obj_a, Time obj_b)
{
 return (obj_a.hours==obj_b.hours && obj_a.minutes==obj_b.minutes);
}

誰かがこれらの演算子の何が問題なのか教えてもらえますか.彼らは時間と分の時間を比較しています.しかし、私は正しい比較を得ていません.時間と分が格納される時間のクラスを定義しました.

4

1 に答える 1

2

このコードには多くの問題があります。<まず、比較を比較に減らしています。<=これは、(残りのロジックが正しければ)比較ルーチンへの引数の順序に応じて、等しい時間が<または のいずれかを比較することを意味します。>

それで、

((obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes) &&  
 (obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes))

でまったく同じ比較を 2 回実行する&&ため、実際には単に実行しています。

obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes

時間または分のいずれかを にしたいため、これは機能しません。つまり<=ということです。<=11:3010:4030 <= 40

この問題に取り組む最も簡単な方法は、時間オブジェクトの比較を分のみの比較に減らすことです。

a.hours * 60 + a.minutes < b.hours * 60 + b.minutes
于 2012-12-16T16:31:56.867 に答える