C ++:重载!=当==重载时

时间:2012-09-04 21:36:13

标签: c++ class overloading operator-keyword

假设我有一个类,我重载了运算符==

Class A {
  ...
  public:
    bool operator== (const A &rhs) const;
  ...
};

...

bool A::operator== (const A &rhs) const {
  ..
  return isEqual;
}

我已经让运算符==返回正确的布尔值。现在我想将它扩展到简单的相反(!=)。我想调用重载的==运算符并返回相反的内容,即性质

bool A::operator!= (const A &rhs) const {
  return !( this == A );
}

这可能吗?我知道this不起作用,但它体现了我想拥有的东西。我想只为通话保留一个参数:rhs。任何帮助都将不胜感激,因为经过多次搜索尝试后我无法得到答案。

2 个答案:

答案 0 :(得分:9)

你几乎拥有它:

bool A::operator!= (const A &rhs) const {
  return !( *this == rhs );
}

请注意this指针,而不是对象。你需要取消引用它。在相关的说明中,通常最好将大多数二元运算符实现为自由函数而不是成员函数。

答案 1 :(得分:4)

您不必在个人(每个班级)的基础上这样做。

标准库已经为这种方法提供了支持,为操作符!=><=>=声明了“默认”模板实现,这些实现依赖于用户提供的运营商==<。这些声明位于标题<utility>中,并包含在名称空间std::rel_ops中。

由于这些实现是在名称空间std::rel_ops中声明的,因此默认情况下不会通过名称查找找到它们。如果要在程序中“激活”这些定义,请执行

#include <utility>
using namespace std::rel_ops;
例如,对于翻译单元中的所有类,这将自动从运算符!=的实现中派生运算符==。您仍然可以通过为某个特定类提供运算符!=的显式实现来覆盖该机制。