前增量和後增量的重載:解決歧義
可以在C 中重載運算符,以擴展內置運算符符的功能使用者定義的類型。常見的用例是為預增量和後增量操作重載增量運算子 ( )。然而,在不遇到歧義問題的情況下實現這一目標是一個挑戰。
初始方法:相同的返回類型
在提供的程式碼片段中,初始嘗試使用以下運算子重載了運算子預增量和後增量的返回類型(int) 相同。然而,這種方法由於以下原因而失敗:
解決方案:使用虛擬參數重載
為了解決這個歧義,後綴版本的運算子被重載為一個虛擬 int 參數。此修改實現了兩個目標:
程式碼範例:
<code class="cpp">#include <iostream> class CSample { public: int m_iValue; // just to directly fetch inside main() CSample() : m_iValue(0) {} CSample(int val) : m_iValue(val) {} // Overloading ++ for Pre-Increment CSample& operator++() { ++m_iValue; return *this; } // Overloading ++ for Post-Increment CSample operator++(int) { CSample tmp(*this); operator++(); // prefix-increment this instance return tmp; // return value before increment } }; int main() { CSample obj1(5); std::cout << obj1.m_iValue << std::endl; // Output: 5 // Pre-Increment ++obj1; std::cout << obj1.m_iValue << std::endl; // Output: 6 // Post-Increment CSample obj2 = obj1++; std::cout << obj2.m_iValue << std::endl; // Output: 6 std::cout << obj1.m_iValue << std::endl; // Output: 7 return 0; }</code>
透過使用後綴版本的虛擬參數重載運算符,我們有效地解決了歧義,並為C 中的自訂類型啟用了預增量和後增量行為。
以上是如何在 C 語言中重載前增量和後增量的增量運算子 ( ) ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!