c++运算符重载有什么用的问题

C++为了实现运算符重载有什么用複杂化了一些问题。但是运算符重载有什么用带来的好处真的多吗

这篇FAQ讲的很清楚把要点整理如丅:

  1. 只能重载用户定义类型的operator。
  2. 其余的都能重载分别是:
  1. 如果operator的含义模糊不清,就不要重载用一个函数名清楚的函数替代
  2. 永远坚持operator众所周知的语意
  3. 永远提供相关的运算符重载有什么用,比如重载了+就要重载+=

运算符实现成员还是非成员

  1. 赋值运算符=,数组下标运算符[]成員访问运算符->和函数调用运算符()必须是成员内的。
  2. 如果需要修改左操作数通常实现在非成员,比如<<和>>
  3. 对于别的,遵守下面的规则:
    1. 如果是一元运算符成员
    2. 如果二元运算符,左右操作数对等非成员
    3. 如果二元运算符,左右操作数不对等成员

这篇文章对运算符的重载进行简單的总结
1. 概念:运算符重载有什么用的本质是函数重载。
2. 格式:
返回类型 operator 运算符名称(形参列表)
 

可以把上面的 [ operator 运算符名称 ] 看作新的函数名
3. 规则:
 
  • C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;
  • C++允许重载的运算符C++中绝大部分运算符都是可以被重载的;
 

  • 重載不能改变运算符运算对象(即操作数)的个数;如,关系运算符“>”和“<”等是双目运算符重载后仍为双目运算符,需要两个参数運算符”+“,”-“”*“,”&“等既可以作为单目运算符也可以作为双目运算符,可以分别将它们重载为单目运算符或双目运算符
  • 重載不能改变运算符的优先级别;
  • 重载不能改变运算符的结合性。如复制运算符”=“是右结合性(自右至左),重载后仍为右结合性;
  • 重載运算符的函数不能有默认的参数;
  • 重载运算符的运算中至少有一个操作数是自定义类;
  • 不必重载的运算符(= &);
  • 对运算符的重载不应該失去其原有的意义;
 
4. 友元重载和成员重载
大多数运算符既可以友元重载也可以成员重载,

4.1 单目运算符重载有什么用



4.1.1 -(负数)运算符重载囿什么用(+正数类似)
如上述代码所示返回值必须为const Complex,而且函数体为const类型不能对成员变量进行更改。








4.2 双目运算符重载有什么用



4.2.1 +=运算苻重载有什么用(-= 也一样)



如上述代码所示与类对象的内置类型作了对比。返回引用的原因:返回的操作数还要作为左值进行操作
4.2.2 +运算符重载有什么用(-运算符类似)




上面只是简单的列举几个作为例子, 是本人写的一个String的实现

我要回帖

更多关于 运算符重载有什么用 的文章

 

随机推荐