Для выполнения задания мне приходится перегружать несколько операторов и использовать их в отношении двух наборов. У меня есть класс 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;
}
}
}
Прежде всего, не используйте имена, которые зарезервированы стандартной библиотекой 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);
}
Ваш оператор == не прав, у вас 2 retstat
, ты никогда не влияешь на это с истиной, ты проверяешь только 1-е.
Просмотрите свой код и сначала проверьте, имеют ли два набора одинаковый размер.