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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
enoka
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 19
#1

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

21.04.2011, 00:53. Просмотров 380. Ответов 4
Метки нет (Все метки)

снова застряла, не могу понять, чем этот оператор должен отличаться от оператора*.....?
вот он, но это работает только в случае оператора*.

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++
Перегрузка внешней функции операции "operator=" C++
no operator found which takes a right/left-hand operand of type "AR" C++
C++ Как переопределить "operator <<" для cout?
Перегрузка "operator =" для шаблона класса C++
Вывод строки с cout: IntelliSense: no operator "<<" matches these operands C++
C++ Создание перегрузки метода "operator =" для типа, расположенного в ином namespace
Глобальное переопределение "operator <<" для char * C++
C++ Написать перегрузку operator+() для класса "Массив"
C++ Добавить целое число в очередь с помощью "operator <<"
Ошибка "binary '==': no operator found which takes a left-hand operand of type" C++
бинарный "operator <<" имеет слишком мало параметров С++ 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 *"?
Ответ Создать тему
Опции темы

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