格式html
《返回值类型》 operator 【运算符】(参数表)web
{函数
//函数体ui
}this
【注意】spa
1、当运算符重载为类的成员函数时,函数的参数个数比原来的操做数要少一个(后置单目运算符除外),这是由于成员函数用this指针隐式地访问了类 的一个对象,它充当了运算符函数最左边的操做数。所以:.net
(1) 双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操做数。unix
(2) 前置单目运算符重载为类的成员函数时,不须要显式说明参数,即函数没有形参。指针
(3) 后置单目运算符重载为类的成员函数时,函数要带有一个整型形参。orm
调用成员函数运算符的格式以下:
<对象名>.operator <运算符>(<参数>)
它等价于
<对象名><运算符><参数>
例如:a+b等价于a.operator +(b)。通常状况下,咱们采用运算符的习惯表达方式。
2、当运算符重载为类的友元函数时,因为没有隐含的this指针,所以操做数的个数没有变化,全部的操做数都必须经过函数的形参进行传递,函数的参数与操做数自左至右一一对应。
调用友元函数运算符的格式以下:
operator <运算符>(<参数1>,<参数2>)
它等价于
<参数1><运算符><参数2>
例如:a+b等价于operator +(a,b)。
3、两种重载形式的比较
在多数状况下,将运算符重载为类的成员函数和类的友元函数都是能够的。但成员函数运算符与友元函数运算符也具备各自的一些特色:
(1) 通常状况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。
(2) 如下一些双目运算符不能重载为类的友元函数:=、()、[]、->。
(3) 类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。
(4) 若一个运算符的操做须要修改对象的状态,选择重载为成员函数较好。
(5) 若运算符所需的操做数(尤为是第一个操做数)但愿有隐式类型转换,则只能选用友元函数。
(6) 当运算符函数是一个成员函数时,最左边的操做数(或者只有最左边的操做数)必须是运算符类的一个类对象(或者是对该类对象的引用)。若是左边的操做数必须是一个不一样类的对象,或者是一个内部类型的对象,该运算符函数必须做为一个友元函数来实现。
(7) 当须要重载运算符具备可交换性时,选择重载为友元函数。
【转】http://blog.chinaunix.net/uid-21411227-id-1826759.html