运算符重载总结
重载为普通函数(正常情况下都是友元函数)时,参数个数为运算符目数;
重载为成员函数时,参数个数为运算符目数减1.
一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。
什么情况下成员函数不能解决问题?比如Complex c; c+5相当于调用c.operator+(5), 可以用;但是5+c就不行了。于是只能重载为普通函数(即友元函数)了。
=、()、[]、-> 只能重载为成员函数。
重载赋值操作符=的意义:浅拷贝/深拷贝(可参考手写String类)。
前置运算符是一元运算符,后置运算符是二元运算符(多一个int参数,无实际意义,仅用于区分前后置)。
拓展:
1. 箭头操作符(成员访问操作符)的重载 ref4 ref5
箭头操作符是一元操作符!(虽然可能看起来像二元操作符)
重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。
以point->action为例,
如果 point 是一个指针,那么这就是一个普通指针的调用;(因为只有对象才有成员函数啊,普通指针又不是什么对象)
如果 point 是定义了 operator-> 操作符的类的一个对象,则将递归应用该操作符。(就是这么定义的)
详细参考 ref4 里的例子。
2. new、delete的重载 ref3