C++运算符重载-总结

导读:

  运算符重载(operator overloading)只是一种“语法上的方便”,也就是说它只是另一种函数调用的方式。 --C++编程思想

  所以调用这些“函数”时,就要改变策略,当然你可以按照一般函数调用的方式来使用,但是这样就体现不出它们的方便性,也不那么的直观了。

  运算符的使用和普通函数的最大区别是在使用上,也就是调用重载的运算符时要把运算符放在参数之前,之前或之后,如:a+b, ++a, a++等。

  那么,该如何重载一个运算符呢? 其实和普通函数类似,只是函数的名字由关键字operator及相关的运算符号组成而已。如重载加法运算符是这样的:

  const A

  operator+(const A &v1,

  const A &v2);

  可以把运算符重载为友元的(也就是非成员函数)和成员函数,二者的区别在运算符是一元的(一个参数)还是二元的(两个参数)。对非成员函数来说,一元就是一个参数,二元是两个;而对于成员函数来说,一元意味着没有参数,二元只有一个参数,举个例子会比较容易理解:

  非成员函数版本的“加法”

  friend const A

  operator+(const A &v1,

  const A &v2);

  成员函数版本的“加法“

  const A

  operator+(const A &v) const;

  关于重载的限制。

  1、重载的运算符不必是成员函数,但必须至少有一个操作数是用户自定义的类型,这样做将防止用户为标准类型重载运算符。

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

  3、不能修改运算符的优先级。

  4、不能定义新的操作符,如不能定义operator**()函数来表示幂运算。

  5、C++中大部分运算符都是可以重载的,下面主要列举那些不被重载的运算符:

  sizeof -- sizeof运算符

  . -- 成员运算符

  .* -- 成员指针运算符

  :: -- 作用域解析符

  : -- 条件运算符

  typeid -- 一RTTI运算符

  const_cast、dynamic_cast、reinterpret_cast、static_cast -- 强制类型转换运算符

  6、大部分运算符都可以定义为成员函数或者非成员函数,但是下面的运算符只能通过成员函数来进行重载:

  = -- 赋值运算符

  () -- 函数调用运算符

  [] -- 下标运算符

  -> -- 指针间接引用运算符

  但有些运算符又必须重载为非成员的,比如为输入输出流重载operator<<和>>时。因为输入输出流是基本的C++类,重载为成员函数显然不对。

  最后要介绍一下参数和返回值,先看几个运算符重载的原型:

  const A opertor+(const A &v) const;

  A &opertor-=(const A &v);

  const A &opertor++(A &a); // Prefix

  const A opertor++(A &a, int); // Post

  细心的你已经发现了,为什么有些地方要用const而有些不用,为什么有时候返回一个对象而有时候要返回引用? 别心急,下面会介绍的。

  1、对于非成员函数参数而言,如果只是读它而不写它,那么应该用const的引用传递进来。当重载运算符为成员函数时,则把它定义为const成员函数即可。

  2、返回值的类型决定于运算符的具体含义。这里有一个简单的规则是:如果结果产生新的对象,则函数返回一个新的对象而不是它的引用,如加法操作;否则返回对象的引用。

  好了,就说这些了,运算符重载是C++的一个很重要的特性,值得我们去细细研究。

  推荐投诉



本文转自

http://blog.chinaunix.net/u/30970/showart_366727.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值