2

文字列を読み込んで、年、月、日、時、分、秒、ミリ秒に分けています。2 つの異なる日付/時刻スタンプを比較できるようにしたいと考えています。元。lhs の hour が rhs の hr より大きいかどうかを確認します。月、日、時、分、秒、ミリ秒のチェックを続けます。これまでのところ、私がやろうとしていることのアイデアはありますが、それをまとめるのに苦労しています. 誰かが素晴らしいアイデアを持っているなら。Ps。これは宿題ではありません。C++ を学習しながら、アプリケーションを作成中です。

ClassName operator < (ClassName &lhs, ClassName &rhs);

上記は関数です。

ありがとう!

4

5 に答える 5

4

それを独立した関数にします:

friend bool operator < (const ClassName &lhs, const ClassName &rhs);

変更点に注意してください:

  • この関数は両方のオペランドを同等に扱うため、どちらも変更しません。
  • const正常な比較の実装ではオペランドを変更してはならないためです。
  • return bool、比較は理想的には aを返す必要があるためbool、いいえ?
  • friend通常、適切に設計されたクラスにはこれらのデータ メンバーが含まれているためprivateです。

実装は、言及したアルゴリズムに従ってデータメンバーの比較を単純に行い、bool結果を返す必要があります。

于 2013-03-27T14:08:09.583 に答える
1

その特定のケースでは、どのオブジェクトが「大きい」かを判断する個々のメンバーを確認する必要があります。比較すると、bool戻り値の型の方が優れているためconst、関数内で引数を変更しないようにします。

bool operator < (const ClassName &lhs, const ClassName &rhs){
    if(lhs.hour > rhs.hour)
       return true;
    return false;
}

入力については、こちらを参照してください。

于 2013-03-27T14:10:19.240 に答える
1

ブースト ライブラリを使用している場合は、日付/時刻ライブラリを使用します。

それ以外の場合は、ctimeを使用して時間を UNIX 時間に変換すると、比較は単純に 2 つの数値の比較になります。

于 2013-03-27T14:11:55.887 に答える
1

私は一連の if ステートメントを使用します。

if(lhs.year > rhs.year)
else if(lhs.year < rhs.year)
else
{
    and check here for months etc.
}
于 2013-03-27T14:13:26.103 に答える
1

operator <値を返す必要がありboolます:

 bool operator < (const ClassName &l, const ClassName &r) 
 {
   return
     std::tie(l.year, l.month, l.day, l.hour, l.minute, l.second, l.millisecond)
     <
     std::tie(r.year, r.month, r.day, r.hour, r.minute, r.second, r.millisecond);
 }

を使用するstd::tieと、コード行が大幅に削減されます。

于 2013-03-27T14:14:20.497 に答える