重载规则
重载规则
- 1、可重载的运算符
+
-
*
/
%
^
&
|
~
!
=
<
>
+=
-=
*=
/=
%=
^=
&=
|=
<<
>>
<<=
>>=
==
!=
<=
>=
&&
||
++
--
,
->*
->
()
[]
new
new[]
delete
delete[]
- 2、只能是成员函数重载运算符的
=
:只有形同的类型的才可以赋值,所以左值和右值必须是同一类型。()
:函数调用运算符。[]
:下标运算符。->
:指针调用运算符。
- 3、重载不能改变运算符的优先级和结合性
乘法的优先级仍然高于加法,并且它们仍然是二元运算符。
- 4、重载不会改变运算符的用法
原有有几个操作数、操作数在左边还是在右边,这些都不会改变。例如~号右边只有一个操作数,+号总是出现在两个操作数之间,重载后也必须如此。
例如,下面这样是不对的:
int operator + (int a,int b){
return (a-b);
}
+
号原来是对两个数相加,现在企图通过重载使它的作用改为两个数相减, 如果允许这样重载的话,那么表达式4+3的结果是 7 还是 1 呢?显然,这是绝对禁止的。
如果有两个参数,这两个参数可以都是对象,也可以一个是对象,一个是C ++内置类型的数据,例如:
complex operator+(int a, complex &c){
return complex(a+c.real, c.imag);
}
它的作用是使一个整数和一个复数相加。
另外,将运算符重载函数作为全局函数时,一般都需要在类中将该函数声明为友元函数。原因很简单,该函数大部分情况下都需要使用类的 private
成员。
- 5、运算符重载函数不能有默认的参数
否则就改变了运算符操作数的个数,这显然是错误的。
- 6、运算符重载函数既可以作为类的成员函数,也可以作为全局函数。
- 成员函数:将运算符重载函数作为类的成员函数时,二元运算符的参数只有一个,一元运算符不需要参数。之所以少一个参数,是因为这个参数是隐含的。
- 全局函数:将运算符重载函数作为全局函数时,二元操作符就需要两个参数,一元操作符需要一个参数,而且其中必须有一个参数是对象,好让编译器区分这是程序员自定义的运算符,防止程序员修改用于内置类型的运算符的性质。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)