重载运算符与STL

重载运算符:使得用户自定义的数据以一种更简洁的方式工作

限制:
不能重载的算符:.    ::    .*    ?:    sizeof
可以重载的运算符 :+     -     *     /     %     ^     &     |     ~
                             !     =     <     >     +=     -=     *=     /=     %   
                            ^=     &=     |=     <<     >>     >>=     <<=     ==     !=    
                            <=     >=     &&     ||     ++     --      ->*     ‘     ->        
                            []     ()      new     delete     new[]     delete[]

重载运算符函数可以对运算符作出新的解释,但原有基本语义不变:

I.不改变运算符的优先级
II.不改变运算符的结合性
III.不改变运算符所需要的操作数
IV.不能创建新的运算符

一元运算符:Object  op    或    op  Object 
二元运算符:ObjectL  op ObjectR
重载为成员函数:
一元:Object . operator op () 操作数由对象Object通过this指针隐含传递
二元:ObjectL . operator op ( ObjectR ) 左操作数由ObjectL通过this指针传递,右操作数由参

成员运算符函数的原型在类的内部声明格式如下:

class X 
{
    //…
返回类型 operator运算符(形参表);
  //…
}
在类外定义成员运算符函数的格式如下:  
返回类型 X::operator运算符(形参表)
{
     函数体
}

重载为友元函数:

一元:operator op (Object)  操作数由参数表的参数Object提供
二元:operator op ( ObjectL, ObjectR )  左右操作数都由参数传递 


双目运算符重载为成员函数:对双目运算符而言,成员运算符函数的形参表中仅有一个参数,它作为运算符的右操作数,此时当前对象作为运算符的左操作数,它是通过this指针隐含地传递给函数的。
例:复数加法
#include <iostream.h>
class Complex
{
public:
 Complex( ) {real=0,imag=0;}
 Complex(double r,double i) {real=r; imag=i;}
  Complex operator + (Complex &c2); 
 void display( );
private:
    double real;
    double imag;
};
Complex Complex:: operator + (Complex &c2) {return Complex(real+c2.real, imag+c2.imag);}
void Complex::display( ){cout<<"("<&
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值