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