一.运算符重载的实质
1.运算符重载:对已有的运算符赋予多重含义,实质是函数重载,它提供了C++的可扩展性。
2.实现机制
转化:
运算表达式转化为对运算符函数的调用
运算对象转化为运算符函数的实参
二.运算符能否重载
1.可以重载的运算符
算术运算符:+,-,,/,%,++,–;
位操作运算符:&,|,~,^(位异或),<<(左移),>>(右移);
逻辑运算符:!,&&,||;
比较运算符:<,>,>=,<=,==,!=;
赋值运算符:=,+=,-=,=,/=,%=,&=,|=,^=,<<=,>>=;
其他运算符:[],(),->,(逗号运算符),new,delete,new[],delete[],->*
2.不能重载的运算符
成员访问运算符.
作用域运算符::
成员指针访问运算符.*
条件运算符?:
Sizeof
三.重载运算符的限制
重载运算符函数可以对运算符作出新的解释,但原有基本语义不变
1.不改变运算符的优先级
2.不改变运算符的结合性
3.不改变运算符所需要的操作数个数
只能重载C++语言中已有的运算符,不能创建新的运算符。
经重载的运算符,其操作数中至少应该有一个是自定义类型。
四.运算符重载的两种形式
(1) 运算符重载为类的成员函数
(2) 运算符重载为类的友元函数
注意:
1.重载为类的成员函数时
参数个数=原操作数个数-1 (后置++、–除外)
2.重载为友元函数时
参数个数=原操作数个数,且至少应该有一个自定义类型的形参。
五.一元运算符 object op或者是op object**
1.重载为成员函数
解释为:object .operator op()
操作数由对象object通过this指针隐含传递
2.重载为友元函数
解释为:operator op(object)
操作数由参数表的参数object提供
六.二元运算符 ObjectL op ObjectR
1.重载为成员函数
解释为:ObjectL . operator op( ObjectR )
左操作数由ObjectL通过this指针传递,右操作数由参数ObjectR传递
2.重载为友元函数
解释为:operator op ( ObjectL, ObjectR )
左右操作数都由参数传递