平等与两个数组的不等式

时间:2015-11-25 16:59:07

标签: c++ arrays equality inequality

对于赋值,我必须重载几个运算符并将它们用于两个集合。我有我的类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;
            }
    }
}

2 个答案:

答案 0 :(得分:1)

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

其次,你的for循环在第一个循环中返回(即错误),你重新初始化你的&#34;找到&#34;在你的循环体中的标志。

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

第四,让你的重载运算符自由发挥功能,使其成为对称的,并使他们成为你班级的朋友,以便能够访问其私人成员。

最后但并非最不重要。如果要比较两个数组是否相等,请使用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);
}

答案 1 :(得分:0)

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