以前一直没太搞明白,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讨论