Множественная перегрузка операторов

215
29 января 2018, 06:23

Неправильно сравнивает 2 массива, вместо false(-) выдает true(+). В чем проблема? (Функция помечена комментарием)

Код:

#include "stdafx.h"
#include <iostream>
using namespace std;
class MyArray
{
    int SizeOfArray;
    int* Arr;
public:
    MyArray() : SizeOfArray(0), Arr(0)
    { }
    MyArray(int SizeOfArray)
    {
        this->SizeOfArray = SizeOfArray;
        Arr = new int[SizeOfArray];
        for (int i = 0; i < SizeOfArray; i++)
        {
            Arr[i] = 0;
        }
    }
    void ShowArray()
    {
        for (int i = 0; i < SizeOfArray; i++)
        {
            cout << Arr[i] << " ";
        }
        cout << endl;
    }
    int& operator[](int);
    bool operator==(MyArray);
    MyArray operator=(MyArray);
};
int main()
{
    setlocale(LC_ALL, "rus");
    MyArray o1(5), o2(5);
    o1[0] = 5;
    o1[2] = 5;
    o1[1] = 5;
    o1[3] = 5;
    o1[4] = 5;
    o2[0] = 5;
    o2[2] = 5;
    o2[1] = 5;
    o2[3] = 3;
    o2[4] = 6;
    o1.ShowArray();
    o2.ShowArray();
    if (o1 == o2)
    {
        cout << "+" << endl;
    }
    else
        cout << "-" << endl;
    o1 = o2;
    o1.ShowArray();
    o2.ShowArray();
    system("pause");
    return 0;
}
int& MyArray::operator[](int i)
{
    return Arr[i];
}
bool MyArray::operator==(MyArray obj2)  //неправильный результат работы этой функции     
{
    if (SizeOfArray != obj2.SizeOfArray)
    {
        return false;
    }
    else
    {
        for (int i = 0; i < SizeOfArray; i++)
        {
            if (Arr[i] != obj2.Arr[i]) 
            {
                return false;
            }
            else
                return true;
        }
    }
}
MyArray MyArray::operator=(MyArray obj2)
{
    for (int i = 0; i < SizeOfArray; i++)
    {
        Arr[i] = obj2.Arr[i];
    }
    return *this;
}
Answer 1

Попробуйте изменить код:

bool MyArray::operator==(const MyArray& obj2) const
{
    if (SizeOfArray != obj2.SizeOfArray)
    {
        return false;
    }
    else
    {
        for (int i = 0; i < SizeOfArray; i++)
        {
            if (Arr[i] != obj2.Arr[i]) 
            {
                return false;
            }
        }
        return true;
    }
}

Почему так - понятно? :)

READ ALSO
Натуральный логарифм числа

Натуральный логарифм числа

Какая функция вычисляет натуральный логарифм числа в C++?

215
память в куче C++

память в куче C++

ЗдравствуйтеНасколько я знаю ОС сама выделяет память под кучу, но как тогда работать с памятью если мы незнаем сколько ее в куче?

167
Приложение некорректно запрашивает права (permission)

Приложение некорректно запрашивает права (permission)

Имеется приложение, которое записывает звук и сохраняет его в памяти устройстваПри первом открытии активити, приложение выдало запрос на разрешение...

205
Максимальный размер окна в undecorated режиме, но не FullScreen

Максимальный размер окна в undecorated режиме, но не FullScreen

Добрый деньОчень надо сделать следующее: создать stage, который будет: undecorated, максимального размера, т

187