重写==操作符用于类比较
Overriding == operator for class comparison C++
我有一个类S,它包含几个公共成员变量:
class S{
public:
int l1;
int r1;
int b;
int l2;
int r2;
// constructor and methods....
}
我想比较类,所以我重写了==
操作符,像这样:
bool operator==(const S &s1, const S &s2){
if(s1.l1 != s2.l1)
return false;
if(s1.l2 != s2.l2)
return false;
if(s1.r1 != s2.r1)
return false;
if(s1.r2 != s2.r2)
return false;
if(s1.b != s2.b)
return false;
return true;
}
然而,这根本不起作用-当我通过创建两个指向S
对象的指针并打印S1 == S2
来测试它时,结果是0,并且我知道成员变量是相等的,因为我也打印它们。
我重写操作符的方式有问题吗?
它是否与我比较指针到S
对象而不是S
对象本身的事实有关?
比较两个指针时,检查它们是否指向相同的地址。如果你想使用你的操作符-取消引用它们:
S *p1 = ...;
S *p2 = ...;
if( *p1 == *p2 ) // would compare objects rather than pointers
注意:在解引用指针之前,一定要确保它们不等于nullptr
。
然而,这根本不起作用-当我通过创建两个指向S对象的指针并打印
S1 == S2
来测试它时,结果是0
这是因为==
操作符适用于对象,而不是指针。指针总是使用内置的比较来比较,因此你会得到一个false
,除非指针实际上指向相同的对象。
如果你想比较指针所指向的对象,你需要这样做:
if (*s1 == *s2)
...
这是因为你在比较指针。指针只是内存地址,所以内存地址必须是不同的,如果他们被单独分配。比较*S1 == *S2来检查它们指向的对象是否相同。
同样,对于这样的对象(没有指针或任何东西),默认操作符==应该可以很好地工作。如果你没有定义运算符,编译器会为你创建一个运算符==在这种情况下,它只会比较int型,它知道怎么做。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 使用比较操作符将Std::string作为Std::map中的键
- c++中的宏操作符和std::字符串比较
- 重写==操作符用于类比较
- 字符串比较的小于操作符无论在什么情况下都会产生相同的结果
- 如何声明比较操作符(小于)重载的模板特化
- 将比较操作符的重载定义/声明为库中的非成员函数
- 比较测试失败:unorder_map上的[]操作符产生的参数数量错误
- 如何在不重载比较操作符的情况下为std::max专门化自定义类型
- 整数类和分数类的添加和比较数据的操作符重载
- 不能使用操作符重载比较const和非const模板类型
- 操作符重载- c++: next_permutation的比较函数
- 如何重载一组对的比较操作符?
- 使用操作符对字符串进行字典比较
- 映射比较操作符重载
- cpp中操作符重载时值的比较
- 字符串比较操作符