Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C++] перегрузка операций

271
24 декабря 2007 года
MrXaK
721 / / 31.12.2002
в-общем надо было написать свой класс типа вектор и перегрузить операторы..
дык вот.. сказано "- Изменение знака элементов вектора"
как я понимаю - это бинарный оператор... а изменить надо элементы у себя.. это неправильно сформулированное задание или я чего не знаю об операторах?
пока перегрузил так:
 
Код:
vector vector::operator- (vector b) {
    for (int i = 0; i < b.getSize(); i++)
        b.setElem (i, (-1) * b.getElem(i));
    return b;
}
320
24 декабря 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: Mr.Hacker
в-общем надо было написать свой класс типа вектор и перегрузить операторы..
дык вот.. сказано "- Изменение знака элементов вектора"
как я понимаю - это бинарный оператор... а изменить надо элементы у себя.. это неправильно сформулированное задание или я чего не знаю об операторах?
...



Вообще-то должно быть как то так

Код:
...
//  Перегруженный унарный -
Vector Vector::operator - () const
{
    //  Создание временного объекта и
    //  инициализация его текущим объектом
    //   для которого вызвается функция
    Vector temp(*this);        
    for(int i = 0; i < size; i++)
        temp.vec = -vec;
    //  Возврат временного объекта
    return temp;                
}
...
16K
24 декабря 2007 года
HolyDel
11 / / 03.03.2006
зачем временная переменная?
 
Код:
Vector Vector::operator - () const
{
    //  Создание временного объекта и
    //  инициализация его текущим объектом
    //   для которого вызвается функция
    for(int i = 0; i < size; i++)
        (*this) = - (*this)    //  Возврат временного объекта
    return this;                
}


так вроде должно проканать.
320
24 декабря 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: HolyDel
...
 
Код:
Vector Vector::operator - () const
{
    //  Создание временного объекта и
    //  инициализация его текущим объектом
    //   для которого вызвается функция
    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;
...
2.0K
24 декабря 2007 года
WidowMaker
212 / / 05.04.2005
Цитата: HolyDel
зачем временная переменная?


Потому, что унарное отрицание обычно (интуитивно) не должно менять this. Тогда операция c=-a; изменит два объекта, а это возможно не то, что вкладывалось в смысл написанного.
Согласен с вариантом m_Valery

350
25 декабря 2007 года
cheburator
589 / / 01.06.2006
Цитата: m_Valery
Не-а,так не "проканает":)


Согласен.
Еще добавлю, что "не проканает" еще и потому, что оператор, описанный HolyDel'ом, объявлен как константный:
Vector Vector::operator - () const
и сам же меняет данные. Сразу видно - код не тестировался :)

P. S. Для изменения собственных данных можно перегрузить оператор *= на double:

 
Код:
const Vector & Vector::operator *= (double)...

Vector a;
a *= -1.0;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог