1.不能用友元重载的运算符:
= () [] ->
原因有2种说法:
(1) operator= 时可以将友元函数声明和类分开放,那么在这个operator=函数之前的代码遇到=号就是默认的=操作符,在operator=之后的代码用的就是这个重载的operator =
造成了混乱.
(2) 作为成员函数重载时,调用对象就是第一个参数,比如=作为成员函数重载,那么class1=class2,class1这个调用对象就是=的第一个参数,即第一个操作数,如果作为友元函数重载,那么就不能像class1=class2这样调用了,这与=本来的用法就不一样,因为作为友元函数重载的话,=必须要两个操作数
我个人偏向说法(1),(2)好像也有道理,但是感觉就是不能完全说服自己
2.对于需要函数调用作为左值的,需要使用引用。
如:int & operator[](int i)const;zai 在赋值表达式A[i]=i+1中,A[i]作为左值操作合法。所以,当重载运算符函数调用需要作为左值时,应该使用引用。
原因:可以减少函数返回值时匿名对象数据复制带来的开销。
除[]外,还有++,--,=等
3.重载<<和>>
friend ostream& operator<<(ostream &output,const Vector &A);
friend istream& operator>>(ostream &output,const Vector &A); //没有&则cin>>A输不进
//去,A值不变
4.Complexoperator+(const Complex &c1,constComplex &c2)
C=c1+25;常引用可以挂在数字上
5.不能重载的运算符
. .* :: ?: sizeof
6.前置自增表达式 ++Aobj 编译器解释为Aobj.operator++() 对应原型A &A::operator++() 或者friend A & operator++(A &)
后置自增表达式 Aobj++ 编译器解释为Aobj.operator++(0) 对应原型A &A::operator++(int) 或者friend A & operator(A &,int)