假设我有一个类,我重载了运算符==
:
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
。任何帮助都将不胜感激,因为经过多次搜索尝试后我无法得到答案。
答案 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;
例如,对于翻译单元中的所有类,这将自动从运算符!=
的实现中派生运算符==
。您仍然可以通过为某个特定类提供运算符!=
的显式实现来覆盖该机制。