运算符重载的局限性
1、无法重载的运算符
. 成员访问运算符 :: 作用域运算符 sizeof 长度运算符 ?: 条件运算符 # 预处理符号
2、只能重载为成员函数的运算符
在C++中,有几个函数只能被重载为成员函数,它们分别是:
-
赋值运算符重载
=
,也叫赋值函数,要进行深拷贝时就需要重载。 -
索引运算符重载
[]
,可以把对象伪装成数组使用。 -
函数调用运算符重载
()
,可以把对象伪装成函数使用。 -
成员访问运算符重载
->
,可以把对象伪装成指针使用。需要注意的是,这些函数只能被定义为成员函数,而不能被定义为全局函数或友元函数。除了上述函数,其他函数可以被定义为全局函数或友元函数。
3、优先重载为成员函数
只有无法修改该对象的代码时,才建议重载为全局函数,但重载全局函数需要在运算对象的类内设置友元,所以语法上支持,但实际情况是个死局。
4、重载运算符时要注意的问题
1、重载运算符的目标是为了提高代码可读性、实用性,如果达不该效果建议定义为函数。
2、重载运算符函数时,要符合情况情理,不要反人性,不要成为你炫技的工具。