huyutian

他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 47 文章 :: 22 评论 :: 0 Trackbacks
以前一直没太搞明白,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讨论
posted on 2010-01-28 16:11 胡雨田 阅读(3348) 评论(0)  编辑 收藏 引用 所属分类: 编程技巧

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理