vector vector::operator- (vector b) {
for (int i = 0; i < b.getSize(); i++)
b.setElem (i, (-1) * b.getElem(i));
return b;
}
[C++] перегрузка операций
дык вот.. сказано "- Изменение знака элементов вектора"
как я понимаю - это бинарный оператор... а изменить надо элементы у себя.. это неправильно сформулированное задание или я чего не знаю об операторах?
пока перегрузил так:
Код:
Цитата: Mr.Hacker
в-общем надо было написать свой класс типа вектор и перегрузить операторы..
дык вот.. сказано "- Изменение знака элементов вектора"
как я понимаю - это бинарный оператор... а изменить надо элементы у себя.. это неправильно сформулированное задание или я чего не знаю об операторах?
...
дык вот.. сказано "- Изменение знака элементов вектора"
как я понимаю - это бинарный оператор... а изменить надо элементы у себя.. это неправильно сформулированное задание или я чего не знаю об операторах?
...
Вообще-то должно быть как то так
Код:
...
// Перегруженный унарный -
Vector Vector::operator - () const
{
// Создание временного объекта и
// инициализация его текущим объектом
// для которого вызвается функция
Vector temp(*this);
for(int i = 0; i < size; i++)
temp.vec = -vec;
// Возврат временного объекта
return temp;
}
...
// Перегруженный унарный -
Vector Vector::operator - () const
{
// Создание временного объекта и
// инициализация его текущим объектом
// для которого вызвается функция
Vector temp(*this);
for(int i = 0; i < size; i++)
temp.vec = -vec;
// Возврат временного объекта
return temp;
}
...
Код:
Vector Vector::operator - () const
{
// Создание временного объекта и
// инициализация его текущим объектом
// для которого вызвается функция
for(int i = 0; i < size; i++)
(*this) = - (*this) // Возврат временного объекта
return this;
}
{
// Создание временного объекта и
// инициализация его текущим объектом
// для которого вызвается функция
for(int i = 0; i < size; i++)
(*this) = - (*this) // Возврат временного объекта
return this;
}
так вроде должно проканать.
Цитата: HolyDel
...
так вроде должно проканать.
Код:
Vector Vector::operator - () const
{
// Создание временного объекта и
// инициализация его текущим объектом
// для которого вызвается функция
for(int i = 0; i < size; i++)
(*this) = - (*this) // Возврат временного объекта
return this;
}
{
// Создание временного объекта и
// инициализация его текущим объектом
// для которого вызвается функция
for(int i = 0; i < size; i++)
(*this) = - (*this) // Возврат временного объекта
return this;
}
так вроде должно проканать.
Не-а,так не "проканает":) Тогда уж так
Код:
...
for(int i = 0; i < size; i++)
(*this)[COLOR="Red"].vect[/COLOR] = - (*this)[COLOR="Red"].vect[/COLOR];
return [COLOR="Red"]*[/COLOR]this;
...
for(int i = 0; i < size; i++)
(*this)[COLOR="Red"].vect[/COLOR] = - (*this)[COLOR="Red"].vect[/COLOR];
return [COLOR="Red"]*[/COLOR]this;
...
Цитата: HolyDel
зачем временная переменная?
Потому, что унарное отрицание обычно (интуитивно) не должно менять this. Тогда операция c=-a; изменит два объекта, а это возможно не то, что вкладывалось в смысл написанного.
Согласен с вариантом m_Valery
Цитата: m_Valery
Не-а,так не "проканает":)
Согласен.
Еще добавлю, что "не проканает" еще и потому, что оператор, описанный HolyDel'ом, объявлен как константный:
Vector Vector::operator - () const
и сам же меняет данные. Сразу видно - код не тестировался :)
P. S. Для изменения собственных данных можно перегрузить оператор *= на double:
Код:
const Vector & Vector::operator *= (double)...
Vector a;
a *= -1.0;
Vector a;
a *= -1.0;