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
,