对于赋值,我必须重载几个运算符并将它们用于两个集合。我有我的类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;
}
}
}
答案 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
,你永远不会影响它,你只测试第一个。
检查您的代码,并首先测试这两个代码是否具有相同的大小。