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

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

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

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

21.04.2011, 00:53. Просмотров 397. Ответов 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 *"?
Посмотрите здесь:

Expected init-declarator before "operator".expected `,' or `;' before "operator" - C++
Пример не мой. Пытаюсь у себя запустить и чтото неполучается. Ошибка на строке 24 Expected init-declarator before &quot;operator&quot;.Expected...

Вывод строки с cout: IntelliSense: no operator "<<" matches these operands - C++
ошибку выдает 3 IntelliSense: no operator &quot;&lt;&lt;&quot; matches these operands operand types are: std::ostream &lt;&lt;...

no operator found which takes a right/left-hand operand of type "AR" - C++
Нашел на форуме исходник программы, собрал, но выдает ошибку описанную выше #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

бинарный "operator <<" имеет слишком мало параметров С++ - C++
Добрый вечер. Нужно в с++ cli сделать перегрузку &lt;&lt;. Подскажите пожалуйста, правильный синтаксис: Попытки угадать синтаксис: ...

Добавить целое число в очередь с помощью "operator <<" - C++
В общем, прочитал я статьи про очереди. Где делается с помощью конструктора,деструктора,массивов. Вот только, у меня одна загвоздка. В...

Реализация перегрузки "operator +" для двух объектов - C++
С=A+B; Что то не получается в операторе operator+; #include &lt;iostream.h&gt; class MASS { int *num; int n; int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
616 / 460 / 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++
616 / 460 / 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2011, 09:42     Чем "operator *=" отличается от "operator *"?
Еще ссылки по теме:

Написать перегрузку operator+() для класса "Массив" - C++
Добрый день, Подскажите, как выйти правильно из ситуации: Array&amp; Array::operator+(const Array&amp; obj) { Array temp; ...

More C++ Idioms/Execute-Around Pointer как в этом случае работает "operator->()" - C++
Читаю сейчас More C++ Idioms Дошел до Execute-Around Pointer и впал в ступор. Есть код // ideone.com/R728xo #include &lt;iostream&gt; ...

Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? - C++
Например printf(setlocale(0, &quot;&quot;)); cout &lt;&lt; endl; printf(setlocale(LC_ALL, &quot;&quot;)); выдают одинаковый результат (ну, на моей...

Создание перегрузки метода "operator =" для типа, расположенного в ином namespace - C++
Здравствуйте. Столкнулся со следующей проблемой которая упрощено выглядит так namespace M{ struct A{ int b; ...

Ошибка "binary '==': no operator found which takes a left-hand operand of type" - C++
while (currentNode != endNode) { nextNode = path; nextNode1 = path; takeRoute.x = nextNode; ...

Ошибка на "cout <<" no match for operator operand types are std::basic_ostream char - C++
Немного слов про код.Данный код создан для выдачи номера машины,цвета,марки при предоставлении имени.Знаю,что код можно было написать проще...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
enoka
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 19
21.04.2011, 09:42  [ТС]     Чем "operator *=" отличается от "operator *"? #5
вот это уже работает)))
спасибо)
Yandex
Объявления
21.04.2011, 09:42     Чем "operator *=" отличается от "operator *"?
Ответ Создать тему
Опции темы

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