C++运算符重载详解

C++运算符重载详解

a. 允许重载的运算符

List item重载运算符需要使用运算符函数,其声明格式为operatorOP(argument-list);
要求OP必须是C++的有效运算符,且不能是./ .* / :: / ?:等;

b. 重载限制

(1)重载后的运算符至少有一个参数为自定义类型;
(2)使用运算符时不能违反运算符原来的句法规则,不能修改运算符的优先级,不能创建新的运算符;
(3)不能重载下面的运算符,sizeof/.成员运算符/ . * 成员指针运算符/::作用域解析运算符/?:条件运算符/typeid一个RTTI运算符/const_cast强制类型转换运算符/dynamic_cast类型转换运算符/reinterpret_cast类型转换运算符/static_cast类型转换运算符等;
(4)大多数运算符可以通过成员函数或非成员函数重载,但=赋值运算符/()函数调用运算符/[]下表运算符/->指针成员运算符只能通过成员函数重载;

成员运算符重载与非成员运算符重载

(1)非成员函数的运算符重载方式不通过成员函数形式调用,要求至少有一个参数为非基本类型;
双目运算符,定义形式为operator X (oprd1,oprd2),使用为oprd1 X oprd2;
前置单目运算符,定义形式为operator X (oprd1),使用为X oprd1;
后置单目运算符,定义形式为operator X(oprd1,0),使用为oprd1 X;
(2)可以使用成员函数形式,也可以使用友元函数形式,基本上等价;成员函数一般默认*this作为左值;友元函数一般默认首先传入的参数作为左值;

成员函数形式与非成员函数形式区别

(1)双目运算符,
成员函数形式,*this隐式传入作为左值,显示传入的参数(有且仅有一个)作为右值;
友元函数形式,显示传入的第一个参数作为左值,第二个作为右值;
(2)单目前缀运算符,X var
成员函数形式,*this隐式传入作为右值,参数列表为空,即不传入参数
友元函数形式,显示传入第一个参数作为右值,有且仅有一个参数
(3)单目后缀运算符,var X
成员函数形式,*this隐式传入作为左值,参数列表为(int),定义仍然为(int),不增加参数名,使用时缺省右值;
友元函数形式,显式传入第一个参数作为左值,第二个参数为int,定义仍然为(int),不增加参数名,使用时缺省右值;
需要注意,只有本身可以作为单目运算符的运算符可以重载为单目运算符;
单目后缀运算符的缺省右值只能使用(int);
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值