超载<类中的运算符

时间:2012-02-29 14:17:17

标签: c++ operator-overloading

我正在尝试使用一个简单的结构作为地图键:

class Foo{
 .
 .
 .
  struct index{
    int x;
    int y;
    int z;
  };

  bool operator<(const index a, const index b);
  .
  .
  .
}

函数itslef:

bool Foo::operator<(const index a, const index b){
  bool out = True;
  if (a.x == b.x){
    if (a.y == b.y){
      if (a.z >= b.z) out = false;
    }
    else if(a.y > b.y) out = false;
  } else if (a.x > b.x) out = false;
  return out;
}

然而,当我编译时,我得到一个错误:

  

memMC.h:35:错误:'bool Foo :: operator&lt;(Foo :: index,   Foo :: index)'必须只有一个参数

据我了解,编制者希望将index与此Foo进行比较。那我怎么能超载操作员?

2 个答案:

答案 0 :(得分:3)

如果要比较两个索引,请在index结构中移动重载:

struct index{
    int x;
    int y;
    int z;
    bool operator<(const index& a) const;
};

如果你想比较一个Foo和一个index(我怀疑这一点,但我只是把它放在这里以防万一),删除第二个参数,因为它不需要:< / p>

class Foo{
  //...
  bool operator<(const index& a) const;
};

请注意,您应该通过引用传递index参数,以防止不必要的复制。

编辑:正如Als正确指出的那样,此运算符应为const

答案 1 :(得分:2)

<是二进制中缀比较运算符,即它需要两个参数相互比较,所以理想情况下它应该实现为自由函数,但是如果你将它实现为成员函数那么它只需要一个论点。

它应该将作为参数传递的参数与调用成员函数的对象进行比较。

您的会员比较运营商应该是:

class Foo
{
    //...
    bool operator<(const index& rhs) const 
    { 
        /* comparison with *this */ 
    }
    //...
};