总结:能写成成员函数就使用成员函数,不能写成成员函数才使用非成员函数(友元)
第一个操作数不是类对象的不能使用成员函数,例如cout<<类对象; 例如 Time t = 1+t1;
注意:非成员函数的重载运算符所需要的形参数目与运算符使用的操作数数目相同;而成员函数所需的参数数目少一个,因为其中的一个操作数是被隐式传递对象本身(this)。
对于某些运算符来说,成员函数是唯一合法的选择。
friend Time operator = (const Time& t);//错误,=只能重载为成员函数
重载运算符作为成员函数必须要求运算表达式第一个参数是类对象,因为必须通过类的对象去调用该类的成员函数。
对于"<<"和">>"的重载必须是非成员函数,因为它的第一个参数是cout或者cin,不是自定义类对象。