第12章 运算符重载

参数和返回值

  1. operator= 需要自赋值检测
  2. 返回值优化

 

不常用的运算符

  1. 下标运算符operator[ ],必须是成员函数
  2. newdelete也是运算符,也可以重载
  3. 逗号运算符operator, 有在对象前和在对象后两个版本。似乎没有什么实际用途
  4. operator->重载后可以让对象更加灵活,常被称为灵巧指针智能指针(smart pointer),例如迭代器,通常与容器类配合使用
  5. 迭代器可以设计为嵌套类写在容器类中,C++标准库中的容器基本上都是这样设计
  6. operator->*运算符是内部数据类型成员访问运算符,例如访问成员函数。实际上重载后应该返回一个对象,该对象支持()运算符,之后就能够类似于(A->*pt)(...)来模仿函数使用了。
  7. =()[]->->*等都必须是成员运算符,.和.*是不能重载的运算符
  8. operator=要防止自赋值问题。同时结合拷贝构造函数可以实现引用计数,并且利用写拷贝技术避免大量的初始化内存开销。
  9. 编译器自动创建的operator=操作符会调用成员的每一个operator= 操作,类似于拷贝构造函数的自动生成。
  10. 自动类型转换可以是通过构造函数实现、也可以通过重载运算符实现。
  11. 避免自动类型转换可以在构造函数前使用explicit关键字来定义
  12. 当提供了转换到不止一种类型的自动类型转换时,会发生一个引起出错的问题,这个问题被称为扇出(fan-out)
posted @ 2012-02-28 19:24  墨界夜  阅读(119)  评论(0)    收藏  举报