C++重载运算符简单总结

  当运算符作用于类类型的运算对象时,可以通过运算符重载重新定义该运算符的含义。明智的使用运算符重载能令我们的程序更易于编写和阅读。

一、基本概念

  1. 什么是运算符重载?
    重载的运算符是具有特殊名字的函数:它们的名字由关键字 operator 和其后要定义的运算符共同组成。
  2. 重载运算符的方式有哪些?
    一般可以通过类成员函数、友元函数或者是类外的普通函数重载运算符。

二、规则

  1. 不能重载的运算符有:.  .*  ::  和 sizeof
  2. 友元函数和成员函数的使用场合:
    一般情况下,建议一元运算符元使用成员函数重载,二元运算符使用友元函数重载
    a. 运算符的操作需要修改类对象的状态,则使用成员函数。比如需要做左值操作数的运算符(=, +=, -=)
    b. 运算时,有数和对象的混合运算时,必须使用友元函数
    c. 二元运算符中,第一个操作数位非对象时,必须使用友元函数。如 << 和 >>

  具体规则见下表:

运算符 建议使用
所有一元运算符 成员函数
= () [] -> 必须是成员函数
+= -= /= *= ^= &= != %= >>= <<= 成员函数
所有其他的二元运算符 友元函数
<<  >> 必须友元函数

三、注意

  1. 一般情况下(除了函数调用操作符),重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。一元运算符有一个参数,二元运算符有两个参数。对于二元运算符来说,左侧运算对象传递给第一个参数,右侧运算对象传递给第二个参数。
  2. 除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。
  3. 当一个重载的运算符是成员函数时,this 绑定到左侧运算对象。所以成员运算符函数的(显式)参数数量比运算对象的数量少一个。
  4. 对于一个运算函数来说,它或者是类的成员,或者至少含有一个类类型的参数:
    //错误:不能为int重定义内置的运算符
    int operator+(int ,int);

     

 

posted @ 2015-07-02 17:17  uangyy  阅读(541)  评论(0编辑  收藏  举报