重载运算符总结

一、     重载运算符的限制:

不能重载的算符      

. ::    .*   ?:   sizeof

可以重载的运算符

+    -    *    /    %   ^   &   |    ~

!     =   <   >   += -=  *=  /=  %

^=  &= |=  << >> >>=    <<=    == !=

<=  >= &&     ||   ++ --   ->* ‘  ->

[]    ()   new     delete new[]  delete[]

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

不改变运算符的优先级

不改变运算符的结合性

不改变运算符所需要的操作数

不能创建新的运算符

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

class X {
    //…
返回类型 operator运算符(形参表);
  //…
}

在类外定义成员运算符函数的格式如下:

返回类型 X::operator运算符(形参表)
{
     函数体
}

友元函数和成员函数的使用场合:一般情况下,建议一元运算符使用成员函数,二元运算符使用友元函数

       1、运算符的操作需要修改类对象的状态,则使用成员函数。如需要做左值操作数的运算符(如=,+=,++)

        2、运算时,有数和对象的混合运算时,必须使用友元

       3、二元运算符中,第一个操作数为非对象时,必须使用友元函数。如输入输出运算符<<和>>

注:

C++中不能用友元函数重载的运算符有

       =    ()    []    ->

成员函数与友元函数的比较:

(1) 成员运算符函数比友元运算符函数少带一个参数(后置的++--需要增加一个形参)。

  (2) 双目运算符一般可以被重载为友元运算符函数或成员运算符函数,当操作数类型不相同时,必须使用友元函数。 

注:1.赋值运算符重载用于对象数据的复制

      2.重载函数原型为:

  类名  &  类名  :: operator= ( 类名) ; 

       3.operator=必须重载为成员函数 

三、(1)运算符 [] () 是二元运算符
      (2)[] () 只能用成员函数重载,不能用友元函数重载

[]运算符用于访问数据对象的元素

重载格式  类型  ::operator[]  ( 类型)

  x 是类 X 的一个对象,则表达式

  x[ y ]

  可被解释为  x . operator [ ] ( y )

()运算符用于函数调用

重载格式  类型  类:: operator()  ( 参数表  )

  设 x是类 X的一个对象,则表达式

  x ( arg1, arg2, … )

  可被解释为

  x . operator () (arg1, arg2, … )

四、重载流插入和流提取运算符 

istream ostream C++ 的预定义流类
cin istream 的对象, cout ostream 的对象
运算符 << ostream 重载为插入操作,用于输出基本类型数据
运算符 >> istream 重载为提取操作,用于输入基本类型数据
用友元函数重载 << >> ,输出和输入用户自定义的数据类型 
五、重载输出运算符<<”(只能被重载成友元函数,不能重载成成员函数)

定义输出运算符“<<”重载函数的一般格式如下:

    

ostream&operator<<(ostream&out,class_name&obj)

    {

          out<<obj.item1;

          out<<obj.item2;

          .. .

          out<<obj.itemn;

          return out;

    }
六、心得体会
之前的运算符只适用于数字之间的运算,而重载运算符后可以将运算符运用到不止数字,更可以运用到类和结构体,使我们的运算更加方便,使我们的运算不拘泥于数字等简单的运算。大大的节省了运算的时间,提高了运算的效率,可以用新的方法来把问题简单化。


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值