我有一个类MyCloth
和我实例化的那个类的一个对象实例:
MyCloth** cloth1;
在程序的某一点上,我会做这样的事情:
MyCloth** cloth2 = cloth1;
然后在某个时候,我想查看cloth1
和cloth2
是否相同。 (像Java中的对象相等,只有这里,MyCloth
是一个非常复杂的类,我不能构建一个isEqual
函数。)
我该如何进行这种平等检查?我想也许可以检查他们是否指向相同的地址。这是一个好主意吗?如果是这样,我该怎么做?
答案 0 :(得分:12)
您可以通过比较两个指针所包含的地址来测试对象身份。你提到Java;这类似于测试两个引用是相等的。
MyCloth* pcloth1 = ...
MyCloth* pcloth2 = ...
if ( pcloth1 == pcloth2 ) {
// Then both point at the same object.
}
您可以通过比较两个对象的内容来测试对象相等。在C ++中,通常通过定义operator==
来完成。
class MyCloth {
friend bool operator== (MyCloth & lhs, MyCloth & rhs );
...
};
bool operator== ( MyCloth & lhs, MyCloth & rhs )
{
return ...
}
使用operator ==定义,您可以比较相等:
MyCloth cloth1 = ...
MyCloth cloth2 = ...
if ( cloth1 == cloth2 ) {
// Then the two objects are considered to have equal values.
}
答案 1 :(得分:4)
如果您想定义一种方法,可以通过该方法对客户类的一组对象进行比较。例如:
someClass instance1;
someClass instance2;
你可以通过重载<本课程的操作员。
class someClass
{
bool operator<(someClass& other) const
{
//implement your ordering logic here
}
};
如果您想要做的是比较,并查看对象是否是字面上相同的对象,您可以进行简单的指针比较,看看它们是否指向同一个对象。我觉得你的问题措辞不好,我不确定你会选择哪个。
编辑:
对于第二种方法,它真的很容易。您需要访问对象的内存位置。您可以通过多种方式访问它。以下是一些:
class someClass
{
bool operator==(someClass& other) const
{
if(this == &other) return true; //This is the pointer for
else return false;
}
};
注意:我不喜欢上述内容,因为通常==运算符比仅仅比较指针更深入。对象可以表示具有相似质量的对象而不相同,但这是一个选项。你也可以这样做。
someClass *instancePointer = new someClass();
someClass instanceVariable;
someClass *instanceVariablePointer = &instanceVariable;
instancePointer == instanceVariable;
这是非感性的,无效/错误。如果它甚至会编译,取决于你的标志,希望你使用不允许这个的标志!
instancePointer == &instanceVariable;
这是有效的,会导致错误。
instancePointer == instanceVaribalePointer;
这也是有效的,会导致错误。
instanceVariablePointer == &instanceVariable;
这也是有效的,会导致TRUE
instanceVariable == *instanceVariablePointer;
这将使用我们上面定义的==运算符来获得TRUE的结果;