1.定义
c++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型operator操作符(参数列表)
注意:
1.不能通过连接其他符号来创建新的操作符:比如operator@
2.重载操作符必须有一个类类型参数。
3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不能改变其含义。
4.作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐含的this。
5. .* :: sizeof ?: . 注意以上5个运算符不能重载。这个经常在笔试选择题中出现。
对于第五点需要注意一下:
*可以重载,但是.*不可以重载。但.*极少使用,大家了解一下,知道有这个运算符就OK啦!
2.举个例子
如果要比较两个类的大小,可以像这样写函数,然后调用函数来比较。但有时函数的名字难以表达它们的功能,这样给使用者带来了困难,因此c++语法支持运算符重载。
这样命名就会方便很多,给使用者带来了很大的便利。只需要修改一下函数名称:operator+运算符,就可以很清晰的读懂该函数的功能以及使用发法。另外,它有两种调用方式,一种是像普通函数一样调用。另一种是像内置类型之间加,减,比较大小一样调用。
这里需要注意一下:流插入符<<的优先级很高,需要打括号!
但是在类外面实现的函数能够访问类里面的成员的前提是类里面的成员是公有的。
那么类里面的成员是私有的话该如何访问呢?那就只能在类中定义成员函数了!
但在类中定义的成员函数也有一个问题:就是隐含的this指针。this指针是编译器悄悄传过去的,也算一个参数,所以我们只用写一个形参就OK啦!
调用的时候可以当作普通的成员函数调用,也可以直接用运算符调用。