假设我有一个重载操作符==的类,如下所示:
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。任何帮助都将不胜感激,因为我在几次搜索尝试后都找不到答案。
发布于 2012-09-05 05:37:47
你差一点就成功了:
bool A::operator!= (const A &rhs) const {
return !( *this == rhs );
}注意,this是一个指针,而不是对象。您需要取消引用它。需要注意的是,通常最好将大多数二元运算符实现为自由函数,而不是成员函数。
发布于 2012-09-05 05:45:56
您不必在单个(每个类)的基础上执行此操作。
标准库已经为这种方法提供了支持,通过声明运算符!=、>、<=和>=的“默认”模板实现,这些运算符依赖于用户提供的运算符==和<。这些声明位于标头<utility>中,并包含在名称空间std::rel_ops中。
由于这些实现是在命名空间std::rel_ops中声明的,因此默认情况下不会通过名称查找找到它们。如果您想在程序中“激活”这些定义,请执行以下操作
#include <utility>
using namespace std::rel_ops;例如,这将自动从您的operator ==实现中为翻译单元中的所有类派生operator !=。您仍然可以通过为某些特定类提供运算符!=的显式实现来覆盖该机制。
https://stackoverflow.com/questions/12271677
复制相似问题