成员函数和友元函数的选择方案指导原则
2013-09-18 11:27
246 查看
成员函数和非成员函数 ( 友元函数 ) 选择方案
通常对类本身的操作 ,( 如赋值 =, 下标 [], 调用 (), 成员访问符 ->, 自增 ++, 自减 --) 请选择成员函数
通常对两个对象进行操作 ,( 如算术操作 , 位操作符 , 关系操作 , 输入输出 ) 请选择非成员函数 , 就是用友元函数实现
成员 / 非成员函数重载选择指导
一元操作符就是操作符有一个对象 , 如 x++,y-- 等 , 通常以类的成员函数实现重载
二元操作符就是操作符有二个对象 , 如 x+y,x-y 等 , 通常以类的友元函数实现重载
以上规则是一个建议,其实两种方式都可以实现,如下所示。注意,如果一个函数有friend修饰,那么它在public还是private域限制都失效了,因为这个函数是friend。以下面的例子为例,friend bool operator ==() 可以移到private域,不影响使用。如果同时定义了友元函数和成员函数,那么VS2010编译器默认调用的是成员函数的版本if (a == b) {...},除非显式调用友元函数版本,比如 if( operator == (a, b)) {...}
通常对类本身的操作 ,( 如赋值 =, 下标 [], 调用 (), 成员访问符 ->, 自增 ++, 自减 --) 请选择成员函数
通常对两个对象进行操作 ,( 如算术操作 , 位操作符 , 关系操作 , 输入输出 ) 请选择非成员函数 , 就是用友元函数实现
成员 / 非成员函数重载选择指导
一元操作符就是操作符有一个对象 , 如 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;}
相关文章推荐
- 第八周任务1:方案二:请用类的友元函数,而不是成员函数,完成上面提及的运算符的重载;
- 关于类中的成员函数和非成员函数(即友元函数)的选择
- 第六周项目四:分别利用成员函数、友元函数和一般函数求距离
- 第六周 项目四--成员函数、友元函数和一般函数有区别(2)
- 条款35 考虑virtual函数以外的其他选择(virtual函数的替代方案)
- 第六周 【项目4-成员函数、友元函数和一般函数有区别】
- 重运算符用成员函数还是友元函数
- 第六周 项目4 成员函数、友元函数和一般函数有区别(1)
- 第六周 项目四--成员函数、友元函数和一般函数有区别 友元函数
- 友元简介:友元函数,友元类和友元成员函数
- c++用类中的成员函数做友元函数
- 第七周项目1-成员函数、友元函数、一般函数的有区别
- 第六周项目四-成员函数、友元函数和一般函数的区别
- C++中成员函数,非成员函数和友元函数
- 第七周项目3-成员函数、友元函数和一般函数区别
- 第七周项目 用一般函数,成员函数,友元函数求两点之间的距离
- 第六周实验指导--下面的程序存在编译错误,请给出两种修改方案--说明处理此类问题的原则是什么
- 成员函数、友元函数和一般函数的区别(两点间距离)
- 7.【项目 1-成员函数、友元函数和一般函数有区别】
- 第6周项目4-成员函数、友元函数和一般函数有区别