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