运算符重载总结

 

重载为普通函数(正常情况下都是友元函数)时,参数个数为运算符目数;

重载为成员函数时,参数个数为运算符目数减1.

一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。

什么情况下成员函数不能解决问题?比如Complex c; c+5相当于调用c.operator+(5), 可以用;但是5+c就不行了。于是只能重载为普通函数(即友元函数)了。

=()[]、-> 只能重载为成员函数。

重载赋值操作符=的意义:浅拷贝/深拷贝(可参考手写String类)。

前置运算符是一元运算符,后置运算符是二元运算符(多一个int参数,无实际意义,仅用于区分前后置)。

ref      ref2

 

拓展:

1. 箭头操作符(成员访问操作符)的重载   ref4      ref5

箭头操作符是一元操作符!(虽然可能看起来像二元操作符)

重载箭头操作符必须返回指向类类型的指针者返回定义了自己的箭头操作符的类类型对象

以point->action为例,

如果 point 是一个指针,那么这就是一个普通指针的调用;(因为只有对象才有成员函数啊,普通指针又不是什么对象)

如果 point 是定义了 operator-> 操作符的类的一个对象,则将递归应用该操作符。(就是这么定义的)

详细参考 ref4 里的例子。

 

2. new、delete的重载    ref3

 

posted @ 2015-08-04 15:46  Ryan in C++  阅读(400)  评论(0编辑  收藏  举报