成员函数和友元函数的选择方案指导原则

来源:互联网 发布:淘宝宝贝无线链接地址 编辑:程序博客网 时间:2024/05/22 09:26
成员函数和非成员函数 ( 友元函数 ) 选择方案 
  通常对类本身的操作 ,( 如赋值 =, 下标 [], 调用 (), 成员访问符 ->, 自增 ++, 自减 --) 请选择成员函数 
  通常对两个对象进行操作 ,( 如算术操作 , 位操作符 , 关系操作 , 输入输出 ) 请选择非成员函数 , 就是用友元函数实现 
成员 / 非成员函数重载选择指导 
一元操作符就是操作符有一个对象 , 如 x++,y-- 等 , 通常以类的成员函数实现重载 
二元操作符就是操作符有二个对象 , 如 x+y,x-y 等 , 通常以类的友元函数实现重载 

以上规则是一个建议,其实两种方式都可以实现,如下所示。注意,如果一个函数有friend修饰,那么它在public还是private域限制都失效了,因为这个函数是friend。以下面的例子为例,friend bool operator ==() 可以移到private域,不影响使用。如果同时定义了友元函数和成员函数,那么VS2010编译器默认调用的是成员函数的版本if (a == b) {...},除非显式调用友元函数版本,比如 if( operator == (a, b)) {...}

class AAA{public:    bool operator == (const AAA &a);    friend bool operator == (const AAA &left, const AAA &right);    private:        int v;};bool operator == (const AAA &left, const AAA &right){return left.v == right.v;}bool AAA::operator == (const AAA &a){return v == a.v;}



原创粉丝点击