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 サイトの他の関連記事を参照してください。