C++ операторы перегрузки

Я застрял с перегрузкой операторов "+", "-", "/" и "*" в моей программе. В основном у меня есть объект, который представляет собой динамически распределяемый массив двойных значений. У меня есть вся программа, но я не могу справиться с этими перегрузками.

мой конструктор выглядит так:

table::table(int size) {
    this->size = size;
    tab = new double[size];
    count++;
}

Я написал что-то вроде этого:

table & table::operator-(const table &tab3 )
{
        table * tab_oper2 = new table(size);
        for(int i=0; i< tab3.size; i++) 
        {
            (*this).tab[i] -= tab3.tab[i];
        }
        return *this;
}

что обычно работает, но это не очень хороший способ сделать это. Мой инструктор сказал мне попытаться переключить (*this) на *tab_oper2, вернуть его в качестве ссылки, но он не работает. Пожалуйста, может кто-нибудь сказать мне, как это сделать правильно?

3 ответа

Решение

Вы размещаете таблицу результатов, но не заполняете ее. Заполните таблицу результатов, и она будет работать.

table & table::operator-(const table &tab3 )
{
        table * tab_oper2 = new table(size);
        for(int i=0; i< tab3.size; i++) 
        {
            tab_oper2->tab[i] = tab[i] - tab3.tab[i];
        }
        return *tab_oper2;
}

C++ является ценностно-ориентированным языком; вернуть table (а не table&). Создайте возвращаемое значение в локальной переменной и верните его. И не забывайте правило трех: с учетом небольшого кода, который вы показали, вам понадобится конструктор копирования, оператор присваивания и деструктор. (Конечно, если вы используете std::vector, скорее, чем new[]Об этом все позаботятся.)

Вы должны вернуть третий объект result по значению:

table table::operator-(const table &t) const
{
        table result(size);
        for(int i=0; i< t.size; i++) 
        {
            result.tab[i] = this->tab[i] - t.tab[i];
        }
        return result;
}

оператор - отличается от оператора -= который ты писал. Когда вы перегружены operator- ты не должен манипулировать this,

Другие вопросы по тегам