【问题标题】:Can I only have const overloaded operator member function?我只能有 const 重载的运算符成员函数吗?
【发布时间】:2016-04-10 00:31:55
【问题描述】:

我正在实现一个分数类,并且需要重载算术运算符。 问题是,我只能实现一个const 版本吗?

例如加法:

Fraction operator+( const Fraction& other ) const;

既然非常量和常量Fraction对象都可以调用这个函数,我还需要一个非常量operator+成员函数吗?

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

    const 成员函数可以在非const 对象上调用,所以不,您不需要非const 重载。

    Fraction a, b;
    Fraction c = a + b; // no problem
    

    【讨论】:

      【解决方案2】:

      一般来说,这种问题最好用会员operator+=和非会员operator+解决,像这样:

      class Fraction {
      public:
          const Fraction& operator+=(const Fraction&);
      };
      
      Fraction operator+(const Fraction& lhs, const Fraction& rhs) {
          Fraction res(lhs);
          res += rhs;
          return res;
      }
      

      【讨论】:

      • @juanchopanza - 呃。固定的。谢谢!
      • 非常周到!非常感谢~~
      • @tobi303: 是的,但也许问题没有被正确地提出......当你仔细阅读它时,你可以理解 Curtis2 想要一个 + 操作符来修改对象(非常量)。但这是真的,理解这一点并不明显......
      【解决方案3】:

      没有。您可以在非const 对象上调用const 方法,就像您可以将const 引用绑定到非const 对象一样。 IOW,您始终可以将可以修改的对象传递给承诺不修改它的代码 - 不会失去安全性。反之当然不正确 - 如果你有一个 const 对象(=> 一个你承诺不会修改的对象)你不能将它传递给不遵守这个承诺的代码。

      【讨论】:

        猜你喜欢
        • 2011-06-04
        • 2012-02-11
        • 1970-01-01
        • 2011-06-05
        • 2012-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多