首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++对象相等

C++对象相等
EN

Stack Overflow用户
提问于 2013-05-31 02:22:24
回答 2查看 39.2K关注 0票数 11

我有一个类MyCloth和一个该类的one对象实例,我按如下方式实例化:

代码语言:javascript
复制
MyCloth** cloth1;

在程序中的某一点上,我会这样做:

代码语言:javascript
复制
MyCloth** cloth2 = cloth1;

然后在以后的某个时刻,我想检查一下cloth1cloth2是否相同。(类似于Java语言中的对象相等,只是在这里,MyCloth是一个非常复杂的类,我不能构建isEqual函数。)

我如何做这个相等性检查?我在想也许可以检查他们是否指向相同的地址。这是个好主意吗?如果是这样,我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-31 03:05:08

您可以通过比较两个指针持有的地址来测试对象标识。您提到了Java;这类似于测试两个引用是否相等。

代码语言:javascript
复制
MyCloth* pcloth1 = ...
MyCloth* pcloth2 = ...
if ( pcloth1 == pcloth2 ) {
    // Then both point at the same object.
}   

可以通过比较两个对象的内容来测试对象是否相等。在C++中,这通常通过定义operator==来完成。

代码语言:javascript
复制
class MyCloth {
   friend bool operator== (MyCloth & lhs, MyCloth & rhs );
   ...
};

bool operator== ( MyCloth & lhs, MyCloth & rhs )
{
   return ...
}

定义了operator==后,您可以比较相等:

代码语言:javascript
复制
MyCloth cloth1 = ...
MyCloth cloth2 = ...
if ( cloth1 == cloth2 ) {
    // Then the two objects are considered to have equal values.
}   
票数 20
EN

Stack Overflow用户

发布于 2013-05-31 02:31:53

如果你想定义一个方法来对你的客户类的一组对象的比较进行排序。例如:

代码语言:javascript
复制
someClass instance1;
someClass instance2;

你可以通过重载这个类的<运算符来实现。

代码语言:javascript
复制
class someClass
{

    bool operator<(someClass& other) const
    {
        //implement your ordering logic here
    }
};

如果你想要做的是比较,看看这些对象是否字面上是同一个对象,你可以做一个简单的指针比较,看看它们是否指向同一个对象。我认为你的问题表达得很糟糕,我不知道你想问的是什么。

编辑:

对于第二种方法,它确实非常简单。您需要访问对象的内存位置。您可以通过许多不同的方式访问它。下面是一些例子:

代码语言:javascript
复制
class someClass
{

    bool operator==(someClass& other) const
    {
        if(this == &other) return true; //This is the pointer for 
        else return false;
    }
};

注意:我不喜欢上面的内容,因为==运算符通常比比较指针更深入。对象可以表示具有相似性质但不相同的对象,但这是一种选择。YOu也可以做到这一点。

代码语言:javascript
复制
someClass *instancePointer = new someClass();
someClass instanceVariable;
someClass *instanceVariablePointer = &instanceVariable;


instancePointer == instanceVariable;

这是无意义的,也是无效/错误的。如果它甚至可以编译,取决于你的标志,希望你使用的标志不允许这样做!

代码语言:javascript
复制
instancePointer == &instanceVariable; 

这是有效的,并将导致false。

代码语言:javascript
复制
instancePointer == instanceVaribalePointer;  

这也是有效的,并且会导致false。

代码语言:javascript
复制
instanceVariablePointer == &instanceVariable;

这也是有效的,并将导致

代码语言:javascript
复制
instanceVariable == *instanceVariablePointer;

这将使用我们上面定义的==运算符来获得TRUE的结果;

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16843323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档