c++重载运算符_C++ 多态性:运算符重载为非成员函数(学习笔记:第8章 04)

运算符重载为非成员函数[1]

有些运算符不能重载为成员函数,例如二元运算符的左操作数不是对象,或者是不能由我们重载运算符的对象。

即:当把运算符重载为类的成员函数时,它的左操作数必须是这个类的对象。

运算符重载为非成员函数的规则

  • 函数的形参代表依自左至右次序排列的各操作数(所有操作数)。
  • 重载为非成员函数时:
    • 参数个数=原操作数个数(后置++、--除外)
    • 至少应该有一个自定义类型的参数。
  • 后置单目运算符 ++和--的重载函数,形参列表中要增加一个int,但不必写形参名。
  • 如果在运算符的重载函数中需要操作某类对象的私有成员,可以将此函数声明为该类的友元(比通过类的公有接口访问私有数据成员效率高)。

运算符重载为非成员函数的规则

  • 双目运算符 B重载后,
表达式oprd1 B oprd2
等同于operator B(oprd1,oprd2 )
  • 前置单目运算符 B重载后,
表达式 B oprd
等同于operator B(oprd )
  • 后置单目运算符 ++和--重载后,
表达式 oprd B
等同于operator B(oprd,0 )

例8-3 重载Complex的加减法和“<<”运算符为非成员函数

• 将+、-(双目)重载为非成员函数,并将其声明为复数类的友元,两个操作数都是复数类的常引用

• 将<<(双目)重载为非成员函数,并将其声明为复数类的友元,它的左操作数是std::ostream引用,右操作数为复数类的常引用,返回std::ostream引用,用以支持下面形式的输出:

cout 

该输出调用的是:

operator 

源代码:

//8_3.cpp

程序输出结果:

f8cd393bac83bdbe6c8542f14093b8f1.png

ostream类在十一章介绍。

参考

  1. ^http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043_2x_2015_T2+sp/courseware/93f0d3a029d84059a84d02745a1e2bfd/4e3fe66cfdf14439903f61fbfe990e1a/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值