一:定义
运算符重载,就是对已有的运算符(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.用于类对象的运算符一般必须重载,但是有两个例外,运算符“=”和运算符“&”。
“=”可以用于每个类对象,这是因为系统已经为每一个新声明的类重载了赋值运算符,它的作用是逐个复制类对象的成员。
&也不必重载,它能返回对象在内存中的地址。