C++运算符重载

 

以上图片来自RUNOOB.COM

下面的运算符只能通过成员函数进行重载

=:赋值运算符

():函数调用运算符

[]:下标运算符

->:通过指针访问变量的运算符

 

重载的运算符的限制和规则:

1.重载后的运算符必须至少有一个操作数是用户自己定义的类型,这将防止用户为标准类型重载运算符。

2.使用运算符时不能违反运算符原来的语法规则,例如,不能将求模运算符(%)重载成使用一个操作数。

3.不能改变运算符的优先级。

4.不能改变运算符的结合性也不能创建新的运算符。

对于单目运算符,其一般没有参数,使用规则和标准的使用方法一致,比如:

T& operator*()const{return node->element;}

对于双目运算符,这时就要注意左操作数和右操作数了,其一般有一个参数,为右操作符,调用的类为左操作符,比如:

bool operator!=(const iterator right)const
	{return node!=right.node;}

其他类型的运算符的操作方法可以归并到单目与双目运算符的重载里面,我就不多说了。

下面是几类特殊的运算符:

1.自增自减运算符

这个有先加加和后加加之分,先加加用operator++()格式进行重载,后++用operator++(int)进行重载。这个int没用就是个标识符而已。

2.->指针运算符的重载

这个运算符只能通过类成员函数进行重载,关键是他是个双目运算符,但是却不显示的定义参数即右操作数,比如:

T* operator->()const {return &node->element;}

假如该函数属于类K

则K->element相当于K.operator->()->element.也就是先调用我们重写的那个函数获取了element的地址,在利用element的地址和默认->运算符调用element。这是个递归调用的过程。

详细原理可以参考这位大侠的博客:https://blog.csdn.net/custa/article/details/5674434

暂时写这么多,等发现其他特殊的重载再来补充。

其他重载符号例子点这里:https://blog.csdn.net/Du_Shuang/article/details/81117296

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值