我有一个类MyCloth和一个该类的one对象实例,我按如下方式实例化:
MyCloth** cloth1;在程序中的某一点上,我会这样做:
MyCloth** cloth2 = cloth1;然后在以后的某个时刻,我想检查一下cloth1和cloth2是否相同。(类似于Java语言中的对象相等,只是在这里,MyCloth是一个非常复杂的类,我不能构建isEqual函数。)
我如何做这个相等性检查?我在想也许可以检查他们是否指向相同的地址。这是个好主意吗?如果是这样,我该怎么做呢?
发布于 2013-05-31 03:05:08
您可以通过比较两个指针持有的地址来测试对象标识。您提到了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.
} 发布于 2013-05-31 02:31:53
如果你想定义一个方法来对你的客户类的一组对象的比较进行排序。例如:
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;
}
};注意:我不喜欢上面的内容,因为==运算符通常比比较指针更深入。对象可以表示具有相似性质但不相同的对象,但这是一种选择。YOu也可以做到这一点。
someClass *instancePointer = new someClass();
someClass instanceVariable;
someClass *instanceVariablePointer = &instanceVariable;
instancePointer == instanceVariable;这是无意义的,也是无效/错误的。如果它甚至可以编译,取决于你的标志,希望你使用的标志不允许这样做!
instancePointer == &instanceVariable; 这是有效的,并将导致false。
instancePointer == instanceVaribalePointer; 这也是有效的,并且会导致false。
instanceVariablePointer == &instanceVariable;这也是有效的,并将导致
instanceVariable == *instanceVariablePointer;这将使用我们上面定义的==运算符来获得TRUE的结果;
https://stackoverflow.com/questions/16843323
复制相似问题