摘要:
要避免交成员费:尽可能将函数指定为非成员非友元函数。
非成员非友元函数通过尽量减少依赖提高了封装性:函数体不能依赖于类的非公用成员。它们还能够分离巨类,释放可分离的功能,进一步减少耦合。它们能够提高通用性,因为在不知道一个操作是否为某个给定类型的成员的情况下,很难编写模版。
使用下面的方法确定函数是否应该是成员和友元:
//如果别无选择,就无需选择了;如果必需,就指定为成员;
If函数是操作符 =,->,或者()之一,则必须是成员:
将其制定为成员
//如果可能是非成员非友元函数,或者设为非成员非友元函数有好处,那就照办
Else if :
a)函数需要与其做参数不同的类型(例如操作符>>或者<<)
b)需要对其最左参数进行强制转换
c)能够用类的公用接口单独实现
将其指定为非成员函数(如果情况a和情况b需要,可以将其指定为非成员友元函数)
如果需要虚拟行为:
添加虚拟成员函数以提供虚拟行为,并通过它实现非成员函数。
Else:
将其制定为成员函数