C ++ / Eclipse cdt,避免实现相同的功能但具有不同的签名

时间:2016-11-07 09:51:47

标签: c++ eclipse

我不知道我要问的是否取决于我使用或使用语言本身的工具,但无论如何。

我有一种情况,我有一种方法"用不同的签名多次声明。如:

class my_class {
   public:
      int getData();
      int getData() const;
      my_class operator+(my_class&,my_class&);
      my_class operator+(const my_class&, const my_class&) const;
      //other operators, other functions etc with similar feature
   private:
      int data;
};

你可以想象实现总是一样的,它只是问题的签名。有没有办法避免写两次相同的函数实现?

一开始我认为从类型到const类型的转换会被执行,但显然我错了。

谢谢

1 个答案:

答案 0 :(得分:1)

  1. 您的重载未正确声明。类成员二元运算符只能使用一个参数,另一个是隐式this。否则,您不能将其与中缀表示法一起使用。

  2. 您不需要两个重载。操作符不应该更改操作数,因此仅使用const版本就足够了。

  3. 这样我们就得到了:

    class my_class {
       public:
          int getData();
          int getData() const;
          my_class operator+(const my_class&) const;
          //other operators, other functions etc with similar feature
       private:
          int data;
    };
    

    或非会员版本:

    class my_class {
       public:
          int getData();
          int getData() const;
          friend my_class operator+(const my_class&, const my_class&);
          //other operators, other functions etc with similar feature
       private:
          int data;
    };
    
    my_class operator+(const my_class&, const my_class&) {
     // code
    }
    

    至于getData()。它返回了您的数据副本,我认为它不会修改实例。那么const重载也足够了。