【问题标题】:Over loading * operator - must take either zero or one arguments重载 * 运算符 - 必须接受零个或一个参数
【发布时间】:2012-11-12 17:17:44
【问题描述】:

我是重载运算符的新手,我进行了一些搜索并找到了this helpful article,我像作者一样编写了自己的代码,但我收到了vector vector::operator*(float, vector) must take either zero or one argument 错误。

这是我的代码:

class vector
{
      public:
       float x;
       float y;

      vector(float, float);
      float operator$ (vector, vector);
      vector operator* (float, vector);
      vector operator* (vector, float);
};

vector::vector(float _x = 0, float _y = 0)
{
   x = _x;
   y = _y;     
}
const float vector::operator$ (const vector &v1, const vector &v2)
{
    return (v1.x * v2.x) + (v1.y * v2.y);
}

const vector vector::operator* (const float &m, const vector &v)
{
    vector ret_val = v;
    ret_val.x *= m;
    ret_val.y *= m;
    return ret_val;
}

const vector vector::operator* (const vector &v, const float &m)
{
      return m * vector;     
} 

我的操作系统是 kubuntu 12.04,我的 IDE 是 dev-C++,使用 wine windows 程序加载器在 linux 上运行。

【问题讨论】:

  • 我第一次看到有人超载$.....
  • 我试图找到一个好的运算符来表示向量中的点积,但我没有想到任何好的;我们可以像我一样定义一个新的运算符吗?

标签: c++ operator-overloading


【解决方案1】:

因为您将operator*() 定义为成员函数,所以已经有一个隐式参数:调用该方法的对象!因此,成员函数采用一个显式参数,而不是两个。

【讨论】:

  • 我们可以通过this. ...访问隐式参数,对吗?
  • @EBi 没错,你可以,但你真的不需要。 this->x 仅相当于成员函数内部的 x。编译器会将x 转换为this->x
  • 如果我需要以MyClass = OtherClass * MyClass保持订单怎么办?
【解决方案2】:

只需在类之外声明您的运算符重载函数。此外,您返回的 const 可能不是您想要的。

class foo {
  //code
};

foo operator*(foo& lhs, bar& rhs) const;
foo operator*(bar& lhs, foo& rhs) const;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-10-15
  • 2021-11-17
  • 2015-06-04
  • 2019-11-12
  • 1970-01-01
  • 2018-04-25
  • 2014-06-13
  • 2017-07-20
相关资源
最近更新 更多