-2

对于分配,我必须重载几个运算符并将它们用于两组。我有我的类 Set,它有两个对象 A 和 B,它们都是集合数组。我试图重载一个相等和不等式函数,它将比较每个集合中的元素并输出它们是否相等。该函数应将对象 Set B 作为参数,并将比较 Set A 和 Set B。当我的程序编译时,它不断输出我的集合不相等,无论是当我输入两个相等的集合时,还是当我输入两个不相等的集合。我已经尝试调整我的功能几个小时,但我没有任何运气。任何帮助深表感谢!

 bool Set::operator==(Set B){


    for (int i=0; i < pSize; i++){

            bool retstat = false;

            if(set[i] == B.set[i]){

                    cout <<"equal" << endl;
            }
            else
                    bool retstat = false;
                    cout <<"not" << endl;

            return (retstat);
    }


}




bool Set::operator!=(Set B){

    bool retstat = false;

    for(int i=0; i < pSize; i++){

            if(set[i] != B.set[i]){
                    retstat = true;
                    cout <<"not equal" << endl;
            }
    }
}
4

2 回答 2

1

首先,不要使用 C++ 标准库保留的名称(即set)。

其次,您的 for 循环在第一个循环中返回(即错误),您还重新初始化了循环主体中的“found”标志。

第三,通过引用将您的对象传递给您的重载运算符。

第四,让你的重载操作符释放函数以便对称,并使它们成为你的类的朋友,以便能够访问它的私有成员。

最后但并非最不重要的。如果要比较两个数组是否相等,请使用std::equal

bool Set::operator==(Set const &B) {
  return std::equal(set, set + pSize, B.set, B.set + B.pSize);
}

bool Set::operator!=(Set const &B) {
  return !std::equal(set, set + pSize, B.set, B.set + B.pSize);
}
于 2015-11-25T17:12:24.643 回答
0

你的 operator== 是错误的,你有 2 retstat,你永远不会用 true 影响它,你只测试第一个。检查您的代码,并首先测试这两个集合是否具有相同的大小。

于 2015-11-25T17:05:02.383 回答