如何在 C++ 类中重载“小于”运算符以比较常量?

Lia*_*ark 1 c++ operator-overloading

我试图在我的类中重载小于运算符“<”,如下所示:

//header file

class HuffmanNode{
  private:
    ...
    ...
    int frequency;

  public:
    ...
    ...
    bool operator<(const HuffmanNode &rhs); //overload less than operator
};
Run Code Online (Sandbox Code Playgroud)
//cpp file

bool HuffmanNode::operator<(const HuffmanNode &rhs){
  return frequency < rhs.frequency;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够按如下方式比较节点:

bool HuffmanTree::compareNode(const HuffmanNode &a, const HuffmanNode &b){
  if (a < b){
    return true;
  }
  else{
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是找到一种方法将两个节点作为常量进行比较。我收到一条错误消息,指出我的运算符重载方法需要标记为 const,但将标头中的代码更改为

const bool operator<(const HuffmanNode &rhs);
Run Code Online (Sandbox Code Playgroud)

和cpp文件代码

const bool HuffmanNode::operator<(const HuffmanNode &rhs){
  return frequency < rhs.frequency;
}
Run Code Online (Sandbox Code Playgroud)

似乎没有消除错误。

我已经检查了这个解决方案,但使用friend关键字似乎也不起作用。

谢谢你的帮助!

ΦXo*_*a ツ 5

您误解了关键字的使用和定位的概念const

只是为了澄清:

const T functionName(something);
Run Code Online (Sandbox Code Playgroud)

意味着您functionName返回 T 类型的内容,并且这是一个常量。

现在这个:

T functionName(something) const;
Run Code Online (Sandbox Code Playgroud)

意味着您functionName返回 T 类型的内容,并且该方法不会更改实例中的任何内容,即使将对象声明为 ,也可以安全地使用它const

第二个选项就是您正在寻找的选项。