Форум программистов, компьютерный форум CyberForum.ru

Чем "operator *=" отличается от "operator *"? - C++

Восстановить пароль Регистрация
 
enoka
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 19
21.04.2011, 00:53     Чем "operator *=" отличается от "operator *"? #1
снова застряла, не могу понять, чем этот оператор должен отличаться от оператора*.....?
вот он, но это работает только в случае оператора*.

C++
1
2
3
4
5
6
7
8
9
10
Matrix Matrix::operator*=(double x)
{
        Matrix rezult(*this);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
             rezult.matr[i][j]*=x;
            }
        return rezult;
}
очень странно, что при выводе результата в операторе, результат правильный, а когда этот результат возвращается в main, в b*=2, выводит только матрицу b
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 00:53     Чем "operator *=" отличается от "operator *"?
Посмотрите здесь:

operator< C++
C++ operator=
C++ Как получить undefined reference вместо вывода?
Operator>> C++
operator char() или operator int() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
21.04.2011, 01:10     Чем "operator *=" отличается от "operator *"? #2
Логика этого оператора такова, что он должен умножить самого себя на число, а у вас это выглядит как оператор *, то есть создается временный объект , умножается на 2 и возвращается, а здесь нужно в конечном счете еще и присвоить результат объекту в *this.

Правильнее будет сделать так
C++
1
2
3
4
5
6
7
8
9
Matrix& Matrix::operator*=(double x)
{
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
             (*this)[i][j]*=x;
            }
        return *this;
}
enoka
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 19
21.04.2011, 01:24  [ТС]     Чем "operator *=" отличается от "operator *"? #3
Цитата Сообщение от Ma3a Посмотреть сообщение
Правильнее будет сделать так
C++
1
2
3
4
5
6
7
8
9
Matrix& Matrix::operator*=(double x)
{
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
             (*this)[i][j]*=x;
            }
        return *this;
}
вот что-то это не работает у меня.....
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
21.04.2011, 01:29     Чем "operator *=" отличается от "operator *"? #4
enoka, не доглядел чуток, вот так тогда

C++
1
2
3
4
5
6
7
8
9
Matrix& Matrix::operator*=(double x)
{
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
             this->matr[i][j]*=x;
            }
        return *this;
}
enoka
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 19
21.04.2011, 09:42  [ТС]     Чем "operator *=" отличается от "operator *"? #5
вот это уже работает)))
спасибо)
Yandex
Объявления
21.04.2011, 09:42     Чем "operator *=" отличается от "operator *"?
Ответ Создать тему
Опции темы

Текущее время: 21:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru