3

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

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. 任何帮助将不胜感激,因为经过几次搜索尝试后我无法找到答案。

4

2 回答 2

9

你几乎拥有它:

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

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

于 2012-09-04T21:37:47.410 回答
4

您不必在个人(每个班级)的基础上进行。

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

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

#include <utility>
using namespace std::rel_ops;

例如,这将自动!===翻译单元中所有类的运算符实现派生运算符。您仍然可以通过!=为某些特定类提供运算符的显式实现来覆盖该机制。

于 2012-09-04T21:45:56.003 回答