【问题标题】:operator overloading with friend and member function使用友元和成员函数重载运算符
【发布时间】:2016-02-25 05:14:17
【问题描述】:

如果我们在一个类中同时使用成员函数和友元函数来重载+运算符,它会给出一个错误,即'operator+'的重载如何解决

【问题讨论】:

  • 那你要打电话给哪一个?
  • 删除其中一个...

标签: c++ overloading operator-keyword


【解决方案1】:

我建议将其实现为非成员函数。这样,您可以使用其他组合重载该函数。例如,假设您有一个类 Point 和另一个类 Vector(一个测角向量,而不是 std::vector)。

你可以超载

Point operator+(Point const&, Vector const&);
Point operator+(Vector const&, Point const&);

如果你将它作为一个成员函数来实现,那么你在一个类中只实现了其中一个。要实现两者,您必须将第一个实现为 Point 的成员函数,将第二个实现为 Vector 的成员函数。

【讨论】:

    【解决方案2】:

    如果你真的想的话,你可以拥有operator+ 的成员和非成员重载。

    Foo a, b;
    a.operator+(b); //call member function
    operator+(a, b); //call non-member function
    

    不过,它破坏了运算符的全部意义,因为您必须实际写出方法调用。


    旁注:非会员 operator+ 不需要成为好友功能。很容易写成:

    Foo operator+ (Foo lhs, const Foo& rhs)
    {
        return lhs += rhs;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2010-12-26
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多