以前一直沒太搞明白,C++書上在重載運算符時,有的使用友元函數,有的使用成員函數有何區別,但自己的程序中需要重載運算符的時候較少,所以也沒往心里去。
最近寫一個程序需要用到C++的函數lower_bound,binary_search進行有序隊列的查找。函數有一個參數需要調用比較函數。我就使用成員函數重載了operator >,結果編譯報錯。檢查了半天也沒找到問題,為什么已經重載了比較運算符,還報錯。然后在網上搜索了一番,終于搞明白了。
bool operator < (const MyClass &rhs);
在調用時實際上是this->(operator <)(&rhs);這個與lower_bound要求的比較函數的兩個參數都要是對象引用不相符,導致編譯錯誤。
修改為友元函數就ok了。
friend bool operator < (const MyClass &lhs, const MyClass &rhs);
其實重載運算符是使用友元函數,還是成員函數,有相當多講究的。
可以看看redsnow的下面這篇文章.但這里主要是根據自己實際中遇到和解決問題的一點體會來寫的。
C++的class的operator定義為friend
function討論