看懂重载运算符
重载运算符,其实很好理解,就是类对运算符的功能进行了重新定义,赋予运算符新的功能。
刚开始接触代码,看到一些重载运算符就很难理解,比如int operator ->() { ... }
, operator A() { ... }
这都是啥意思? 后来知道,第一个是重载了->,但是这种写法对新手不好理解。
operator这个单词是加载运算符前面的,表示这是一个运算符,不然看到了不知道这是定义的什么函数。所以我个人觉得operator不应该和运算符分开。可以写成这样int operator-> () { ... }
就很清晰了,operator->
一个整体啊,相当一个函数名,后面的() { ... }
表示我们在定义一个函数,和正常定义函数一样的写法,如果operator
和->
分开写,对刚接触重载运算符的人来说很难理解。
实现运算符重载的方式通常有以下两种:
-
运算符重载实现为类的成员函数;
-
运算符重载实现为非类的成员函数(即全局函数)。
详细的讲解:推荐
特殊的重载(operator)
-
类型转换运算符重载:它的写法是这样的
operator Type() { return mType }
,和重载常规的<
等有点不一样。 -
仿函数:它是具有函数功能的类对象,需l类中重载小括号运算符
retType operator() (入参...) { ... }
例子 -
不能重载的操作符包括:
sizeof
、.
、.*
、::
、?:
、RTTI类型运算符
、=
、()
、[]
。特别地,->
操作符只能被类的成员函数重载。