【问题标题】:C++ comparing two objectsC++比较两个对象
【发布时间】:2011-08-27 02:50:11
【问题描述】:

我得到了这个功能:

bool operator==(const foo& foo1, const foo& foo2)

我如何比较这两个对象,是否有一个库函数可以让我这样做?还是我必须对对象内的每个变量进行物理比较。

编辑:

foo 对象持有:

private: 
int *values;
size_t *columns; 
std::map< size_t, std::pair<size_t, unsigned int> > maps;

【问题讨论】:

  • 只是好奇,当您更喜欢std::mapstd::pair 时,为什么不选择std::vector 而不是原始指针?
  • 这是一个家庭作业,所以我按照我的讲师给我的去做。

标签: c++ object compare


【解决方案1】:

比较函数的语义取决于您的意图以及对象内部的性质和语义。在您的情况下,只有您知道 foo 是什么,因此,只有您知道如何正确地将一个 foo 对象与另一个 foo 对象进行比较。您的问题没有万能的答案。

【讨论】:

  • foo 拥有 3 个私有变量,指向 3 个不同数组的指针 int *values; size_t *columns;std::map&lt; size_t, std::pair&lt;size_t, unsigned int&gt; &gt; maps;
  • @wpp: 那么,如果foo1foo2values 指针相等(即,两者都为null 或都指向同一个int 对象),那么它们是否被视为相等,或者如果它们指向具有相同值的可能不同的int 对象?还是values指向int数组的第一个元素;如果是这样,数组中有多少元素是相关的? columnsmaps 以此类推。您必须决定平等的含义。
  • @Keith 对我的模糊描述感到抱歉,让我澄清一下,两个 values 指针创建两个不同的数组,并且被认为是相等的,如果它们指向的每个数组具有相同的值。即如果数组中每个元素的地址处的元素值相同,则两个对象相等
  • @wpp:好吧,你已经知道部分答案了。但是您别无选择,您必须像上面给出的描述并将其转换为代码。您正在学习成为一名程序员,在某些情况下,您必须停止说“要执行此操作的库在哪里”,而要开始说“我如何编写代码来执行此操作”。
【解决方案2】:

你要自己过一遍,比较自己里面的变量。

这样,您就可以定义什么是平等。如果foo 代表一个人,您可以将两个foos 定义为仅通过名字、名字和姓氏、社会安全号码或任何您想要的。只有您作为课程的编写者,才知道两个对象相等意味着什么。

【讨论】:

    【解决方案3】:

    它取决于类foo 和它有哪些数据成员,以及什么是有效相等。想象一下你的foo 如下:

    class foo {
    private:
        long id;
        ...
    };
    

    如果您想根据id 字段进行比较:

    bool operator==(const foo& foo1, const foo& foo2) { return foo1.id == foo2.id; }
    

    它们可以根据您的需要简单或复杂。

    【讨论】:

      【解决方案4】:

      您拥有的重载运算符的签名是针对在foo 类之外定义的静态函数。由于您声明foo 的数据成员被声明为private,因此您将很难让您的操作员工作。

      如果您需要在作业中使用该签名,则需要研究 friend 关键字...毕竟,它作业,没有人会为您做。

      如果不是,请考虑使运算符成为foo 类的成员。 This 是运算符重载的一个很好的通用参考。

      【讨论】:

        【解决方案5】:
        bool operator ==(const Student &first, const Student &second)
        {
            return (first.rollno == second.rollno && first.str == second.str);
        }
        
        class Student
        {
        public:
            string str;
            int rollno;
        
            Student(string str1,int rollno1)
            {
                str=str1;
                rollno1=rollno;
            }
        };
        
        cout <<"is s1=s2? \n" << boolalpha << operator==(s1,s2) <<endl;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-02
          • 2014-01-26
          • 2012-08-17
          • 2014-03-02
          • 1970-01-01
          相关资源
          最近更新 更多