目录
一:定义
运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义
二:格式
返回值类型 operator 运算符(形参表)
{
……
}
三:例子
这里我们是重新定义了’+’这个运算符,让他能够完成坐标的相加
这就让’+’这个运算符被重载后,其原有的功能依然保留,没有丧失,又能完成特定情况下的任务。
#include <iostream>
using namespace std;
class complex
{
public:
complex()
{
left = 0; right = 0;
}//定义构造函数
complex(double r, double i)
{
left = r; right = i;
}//构造函数重载
complex operator +(complex& c2) //定义重载运算符'+'的函数,这里还有一个隐藏的this指针,实际上这里是c1和c2
{
complex c;
c.left = right + c2.right;//实际上是C1.right+C2.right
c.left = left + c2.left;//实际上是C2.left+C2.left
return c;//返回局部对象
}
void out()//定义输出函数
{
cout << "(" << left << "," << right << ")" << endl;
}
private:
double left;
double right;
};
int main()
{
complex c1(80, 5), c2(5, -100), c3;
c3 = c1 + c2;
c1.out();
c2.out();
c3.out();
return 0;
}
四:规则
1.c++不允许用户自己定义新的运算符,只能对已经有的运算符进行重载。
2.c++允许重载的运算符
双目关系运算符:+,-,,/,%
关系运算符:==,!=,<,>,<=,>=,
逻辑运算符:||,&&,!
单目运算符:+,-,指针,&
自增自减运算符:++,–
位运算符:|,&,~,^,<<,>>
赋值运算符:=,+=,-=,=,/=,%=,&=,|=,^=,<<=,>>=
空间申请与释放:new,delete,new[],delete[]
其他运算符:()函数调用,->,->,逗号,[]下标
3.重载不能改变运算符运算对象的个数
4.重载不能改变运算符的优先级
5.重载不能改变运算符的结合性
6.重载运算符的函数不能有默认的参数
7.重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个使类对象(或类对象的引用)。也就是说,参数不能全部使c++的标志类型,以防止用户修改用于标准运算符的性质。
8.用于类对象的运算符一般必须重载,但是有两个例外,运算符“=”和运算符“&”。
“=”可以用于每个类对象,这是因为系统已经为每一个新声明的类重载了赋值运算符,它的作用是逐个复制类对象的成员。
&也不必重载,它能返回对象在内存中的地址。