运算符重载

<<插入运算符

>>提取运算符

上面两个运算符本来是逻辑左移和逻辑右移,因此这两个运算符进行了重载。


运算符重载,使运算符能用于类对象;

运算符被重载后,其原有的功能仍然保留,没有丧失或改变;

运算符重载实际上是函数的重载:

对每个需要重载的运算符定义一个重载运算符的函数

需要执行被重载的运算符时,系统就自动调用该函数,以实现相应运算。



运算符重载的方法:

类型名 operator运算符名称 (形参表列){对运算符的重载处理},比如:

Complex Complex::operator+(Complex &c2)

{
Complex c;

c.real=real+c2.real;

c.imag=imag+c2.imag;

return c;

}

上面的程序更简单的写法:

Complex Complex::operator+(Complex &c)

{
return Complex(real+c.real.imag+c.imag);//直接调用了构造函数生成了结果对象,并返回

}

上面两种方式都是通过成员函数实现的。其实还可以通过友元函数或者一般函数进行实现,如下:

Complex operator+(Complex &c1,Complex &c2)

{

return (c1.real+c2.real,c1.imag+c2.imag);
}

只不过对于上面的实现来说,如果声明为友元函数还好,这样的话这个函数可以访问Complex类的私有数据成员

real和imag;但是如果是一般的函数,那么就需要在Complex类中定义public的set或者get函数,来对私有数据成员进行操作。


对于上面的对‘+’的运算符重载来说,可以通过

Complex c3=c1+c2;//需要注意的是这里调用了默认复制构造函数。通过浅复制将第一种方式中的c的值复制给了c3.然后第一种方式中的局部变量c就会被释放掉。

或者

c3=c1.operator+(c2);

来使用,这两种是等价的。需要注意的是对于前一种,当前对象一定是左边的这个,因为在后一种

中可以看到这其实就是当前对象调用了成员函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值