天之道

享受编程的乐趣。
posts - 118, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

为什么用友元函数重载运算符

Posted on 2011-12-18 12:34 hoshelly 阅读(1277) 评论(0)  编辑 收藏 引用
运算符重载函数一般采用两种形式,一种是定义为类的成员函数,另一种是定义为类的友元函数。
大多数情况下,使用成员函数和友元函数重载运算符在功能实现上是相同的,重载时如果没有本质的区别,则应该首先考虑使用成员函数以保证数据封装。然而在某些情况下,如C++不能直接进行复数加、减、乘、除的四则运算,但是使用友元函数就可以实现重载这些运算符。
如 定义 
   class complex
{
    public:
            complex(){real=imag=0;}
            complex(double r,double i)
           {
             real=r,imag=r;
            }
   friend complex operator+(const complex &c1,const complex &c2)
  {
        return complex(c1.real+c2.real,c1.imag+c2.imag);
  }...

!注意友元运算符函数的参数类型是引用类型!

一般而言,以下两种调用方法是等价的:
aa@ bb //隐式调用
operator @ (aa,bb) // 显式调用
@为运算符

在实际开发过程中,单目运算符建议重载为成员函数,而双目运算符建议重载为友元函数。通常下双目运算符重载为友元函数比重载为成员函数更方便,但是有时双目运算符必须重载为成员函数,例如赋值运算符。

            

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