在C++中,可以用关键字operator加上运算符来表示函数,叫做运算符重载。
运算符与普通函数在调用时的不同之处是:对于普通函数,参数出现在圆括号内;而对于运算符,参数出现在其左、右侧。
从语法上讲,可以重载大部分的运算符,并且既可以重载为普通/友元全局函数,又可以重载为成员函数。重载运算符有以下几点限制:
(1)不能重载C++语言的内置数据类型(如int,float等)的运算符。
(2)不能重载‘.’,因为‘.’在类中对任何成员都有意义,已经成为标准用法。
(3)不能重载目前C++运算符集合中没有的符号,如#,@,$等。原因有两点,一是难以理解,二是难以确定优先级。
(4)对已经存在的运算符进行重载时,不能改变优先级规则,否则将引起混乱。
(5)'=','()','[]'和'->' 只能重载为成员函数。
如果运算符被重载为全局函数,那么只有一个参数的运算符叫做一元运算符,有两个参数的运算符叫做二元运算符。如果运算符被重载为类的成员函数,那么一元运算符没有参数,二元运算符只有一个右侧参数,因为对象自己就是左侧参数。
以下是重载运算符的建议:
1)建议将所有的一元运算符重载为成员函数。
2)建议将'+=' '-=' '*=' '/=' '%=' '&=' '|=' '~=' '>>=' '<<=' 重载为成员函数。
3)其它所有运算符建议重载为全局函数。
参考:
[1] C++中重载操作符时什么时候定义成友元,什么时候定义为成员方法
阅读(469) | 评论(0) | 转发(0) |