一、操作符重载
1.什么是操作符重载
就是把一些操作符通过关键字operator,组装成一个函数,关键字operator后面接需要重载的操作符符号
2.为什么需要重载操作符?
(1)简单、方便,比起封装一个函数,使用operator比较形象直观
(2)可以提高代码的可读性
(3)为了处理自定义类型和内置类型之间的运算
3.操作符重载的格式
函数的返回类型 operator 操作符(参数列表)
例如:int operator=(int a,int b);
ps:操作符重载也是一个函数,具有返回值和参数,此函数的形参个数与操作符的操作数目相关,例如 ‘+’ 是双目操作符,也就是说 ’+‘ 是有两个参数的,那重载’+‘时,就需要两个参数。
4.不能被重载的操作符
(1). //成员选择符
(2).* //成员对象选择符
(3):: //域解析操作符
(4)?: //条件操作符
(5)sizeof
ps:除了赋值号(=)外,基类中被重载的操作符都将被派生类继承
###5.重载操作符注意事项
(1)不能通过连接其他符号来创建新的操作符,例如operator@
(2)重载操作符时必须有一个类类型或者枚举类型的操作数
(3)用于内置类型的操作符被重载时,其含义不能被改变,例如操作符加号(+)就是用来求和的,重载后,不能改变此操作符的意义
(4)作为类成员的重载函数,其形参的数目看起来比操作数数目少一个,这是因为成员函数的操作符有一个默认的形参this,限定为第一个参数
(5)一般将算术操作符定义为非成员函数,赋值运算符定义为成员函数
(6)操作符定义为类的成员函数时,一般将其定义为类的友元函数
(7)操作符:==和!=一定要成对重载
(8)下标操作符[ ]:重载此操作符时,需要重载两个,一个是非const成员并返回引用,一个是const成员并返回引用
(9)在重载操作符:解引用操作符*和->时,不显示任何参数
(10)重载前置++(前置–)时,返回值是以引用的形式返回,而且没有参数
(11)重载后置++(后置–)时,返回值是值的形式返回,但是需要一个参数,此参数没有任何作用,只是为了与前置++区分,也是为了和前置++构成重载,此参数编译器自动维护。
(12)输入操作符>>和输出操作符<<必须定义为类的友元函数
前置++(--)
ps:前置++和前置- -的原理相同
后置++
ps:后置++和后置- -的原理相同
6.重载操作符的优缺点
(1)优点
a.可以使程序更自然、更直观;
b.可以提高代码的可读性;
c.会使程序的效率增加
(2)缺点
a.会使类难以理解,也就是会降低代码的可读性;
b.可能也会程序的效率
二、赋值操作符重载
赋值操作符重载就是把等号(=)重载,形成一个函数
重载操作符赋值号时,一定要注意这四个问题,也就是说呢,这四个方面就是考点啦