ホームページ > バックエンド開発 > C++ > C で前インクリメントと後インクリメントの両方で演算子を正常にオーバーロードするにはどうすればよいですか?

C で前インクリメントと後インクリメントの両方で演算子を正常にオーバーロードするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-30 09:07:02
オリジナル
485 人が閲覧しました

How to Successfully Overload the    Operator for both Pre and Post Increment in C  ?

Pre および Post Increment のオーバーロード: あいまいさを明らかにする

C の領域では、プログラマはカスタムの演算子をオーバーロードする必要に遭遇することがよくあります。クラス。よくある課題の 1 つは、前インクリメント操作と後インクリメント操作の両方で演算子をオーバーロードすることです。

ジレンマ

最初に前インクリメントと後インクリメントの両方の演算子をオーバーロードする簡単な作業のように思えます。ただし、基本的なあいまいさが存在します。演算子はオブジェクトへの参照 (接頭辞) またはインクリメント前の値 (接尾辞) を返すことができ、結果は次のようになります。

<code class="cpp">class CSample {
public:
  int m_iValue;
  // Pre-Increment
  int /*CSample& */ operator++();
  // Post-Increment
  // int operator++();
};</code>
ログイン後にコピー

異なる戻り値の型で単にオーバーロードしているだけです。上の例のように、あいまいさの解決に失敗します。

解決策

このジレンマの解決策は、後置バージョンにダミーの int パラメータを導入することです。これにより、2 つのインクリメント操作を区別できるようになります。

<code class="cpp">// Pre-Increment
CSample& operator++();

// Post-Increment
CSample operator++(int);</code>
ログイン後にコピー

このアプローチにより曖昧さがなくなり、インクリメント前とインクリメント後の両方で正しくオーバーロードできるようになりました。

演算子の後置バージョンダミーの int パラメータを受け取り、インクリメント前のオブジェクトのコピーを返します。次に、オブジェクトは事前インクリメント演算子を使用してインクリメントされます。

使用法

これらのオーバーロードを定義すると、事前インクリメントと事後インクリメントの両方に使用できるようになります。

<code class="cpp">CSample obj;
obj++; // Pre-Increment
++obj; // Post-Increment</code>
ログイン後にコピー

結論

インクリメント前とインクリメント後の両方で演算子をオーバーロードするには、慎重に検討し、関連するあいまいさを明確に理解する必要があります。ダミー パラメーターを利用して 2 つの操作を区別することで、両方の動作をカスタム クラスに正常に実装できます。

以上がC で前インクリメントと後インクリメントの両方で演算子を正常にオーバーロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート