运算符重载的规则
为什么要操作符重载
在C++编辑器中,如果你定义的一个类型是一个基础类型,那么我们进行一个运算的话完全没有任何的问题比如,int a,b,c; c=a+b;这里的加号和我们平常理解的加号意义是完全一样的,但是如果是类的话了,我们想做一个类的加减的话,这样就不行了。所以我们才用到运算符的重载达到我们的目的。
规则
可以重载的运算符
+
-
*
/
%
^
&
| ~ !
=
<
>
+=
-=
*=
/=
% ^=
&=
|=
<<
>>
>>=
<<= ==
!= <=
>=
&&
||
++
--
->*
‘
-> []
()
new delete
new[]
delete[]
不可以重载的运算符
.
::
.*
?:
sizeof
由于可以重载的运算符很多,所以我们只需要记住不可以重载的运算符。
重在运算符的限制
1.不改变运算符的优先级
2.不改变运算符的结合性
3.不改变运算符所需要的操作数
4.不能创建新的运算符
语法
类型 类名 :: operator op ( 参数表 )
{
// 相对于该类定义的操作
}
{
// 相对于该类定义的操作
}
代码
对着代码骑自行车
#include "iostream"
using namespace std;
class Complex
{
public:
Complex(int a, int b);
~Complex();
void printCmp()
{
cout << "a=" << a << "b=" << b << endl;
}
public:
int a;
int b;
};
Complex::Complex(int a, int b)
{
this->a = a;
this->b = b;
}
Complex::~Complex()
{
}
Complex add(Complex &c1, Complex &c2)
{
Complex c3(c1.b + c2.a, c1.b + c2.b);
return c3;
}
//运算符重载对+号的重载
Complex operator+(Complex &c1, Complex &c2)
{
Complex c3(c1.a + c2.a, c1.b + c2.b);
return c3;
}
void main()
{
Complex c1(1, 2), c2(2, 3);
//Complex c3 = add(c1, c2);
Complex c3 = c1 + c2;
c3.printCmp();
/*int a = 10;
int b = 11;
int c = a + b;
cout << c << endl;*/
system("pause");
}
定义了一个类,类要对相应的数据进行相加减,这样我们看到c3=c1+c2如果没有操作符重载的话,只能通过add这个方法进行加减,如果有了操作符重载以后我们发现两个类直接进行加减,我们就可以直接得到对应的结果,这个很方便。