面向对象要求数据应该尽可能的被封装,然而与直观相反,成员函数带来的封装性比非成员非友元要低。
非成员函数可以允许函数有较大的包裹弹性。
如果某些东西被封装,则不可见,不可见的东西越多则我们就有越大的弹性去变化他,因为我们改变的仅仅直接影响看到改变的那些人事物。
另一方面如果非成员友元和成员函数机能相似,那么选择非成员友元会好些,因为他们并不增加访问私有成员变量的函数数量。
namespace和classse访问的范围不同,前者可以跨越多个源文件。将所有便利函数放在多个头文件中,保证她们的命名空间相同,意味着客户可以轻松扩展这组便利函数,
我们需要做的就是在这组命名空间中添加不同的非成员非友元函数。
还有,若所有参数都需要类型转换的时候,我们希望采用非成员函数去完成。
result=onehal*2;
result=2*onehal;错误
原因是:
只有当参数被列于参数咧内,此参数才是隐式类型转换的合格者。第一次调用伴随一个凡在参数咧内的参数,但是第二次调用的时候并没。