1. 运算符重载函数形式:
返回值 关键字operator 运算符(参数列表){函数体}
2. 重载运算符函数的参数数量与运算符的运算对象数量一致,一元运算符有一个参数,二元运算符有两个参数。二元运算符左侧的对象传递给第一个参数,右侧的对象传递给第二个参数。
3. 运算符函数是成员函数时,this绑定到左侧运算对象,运算符函数的参数数量也要比运算对象少一个。
4. 运算符函数或者是类成员函数,或者至少含有一个类类型的参数
int operator+ (int, int) //错误,不能为int冲定义内置的运算符
5. 运算符函数可以通过运算符来调用,也可以通过普通函数名来调用
data1 + data2; //运算符调用
operator+(data1, data2); //函数名调用
6. 大多数运算符可以重载,除了以下几类
::
.*
.
? :
7. 逗号、取地址、逻辑与、逻辑或运算符不应该被重载,以为重载后的运算符失去了运算符本身包含的一些性质,如短路求值、运算对象求值顺序等
8. 作为成员函数还是非成员函数:
(1) 赋值=、下标[]、调用()、成员访问箭头->必须是成员;
(2) 复合赋值运算符+=、-=、*=、/=一般来说应该是成员,但不是必须
(3) 改变对象状态,或者与给定类型密切相关的运算符,如递增++、递减--、解引用* 等运算符,应该是成员;
(4) 具有对称性的运算符可能转换任意一端的对象,例如算术、相等性、关系、位运算等,通常应该是普通非成员,因为成员函数左侧的参数必须是this对象。