运算符重载笔记

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值