重载方法
本质上是定义一个函数,在指定类型使用该操作符时调用该函数。
函数类型 operator 运算符名称 (形参表列)
{ 对运算符的重载处理 }
比如对+进行重载,注意使用隐指针引用:
Complex operator+ (Complex& c1,Complex& c2);
重载规则
1.只能重载已有运算符。
2.类属关系运算符“.”、作用域分辨符“::”、成员指针运算符“*”、sizeof运算符和三目运算符“?:”不能重载。
3.不改变优先级,结合性,操作数个数,语法结构。单目运算符重载后为单目,双目重载后为双目。
4.重载运算符不允许有默认参数
5.重载至少针对一个类。=和&不需要用户重载
重载为成员函数
将操作符重载为类的成员函数,可以自由访问该类的成员。
函数声明:
<类型> operator <要重载的运算符>(形参表);
函数定义:
<类型> <类名>:: operator <要重载的运算符>(形参表)
{
函数体
}
双目运算
重载时只有一个形参,就是加数。被加数默认是当前对象。
oprd1 B oprd2,等价于oprd1.operateB(oprd2)
单目运算
前置单目:B oprd
没有形参,操作对象是当前对象 ,相当于 oprd.opratorB()
后置单目:oprd B
一个int类型的形参,相当于oprd.opratorB(0);
对于++(或–)运算符的重载,因为编译器不能区分出++(或–)是前置的还是后置的,所以要加上(int)来区分。
重载为友元函数
函数声明:
friend <函数类型> operator <运算符>(形参表);
函数定义:
<函数类型> operator <运算符>(形参表)
{
函数体;
}
双目运算
oprd1 B oprd2 相当于调用 operator B(oprd1, oprd2)
有两个形参
单目运算
前置:B oprd,相当于operator B(oprd)
后置:oprd B,相当于operator B(oprd, int)
重载设计
重载为类成员函数的有:=,[ ],( ),->(以上必须)
和对象联系紧密的,比如自增自减(非必须)
重载为友元函数的有:算数操作符,相等操作符,关系操作符,位操作符(>>,<<)