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

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

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

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

21.04.2011, 00:53. Просмотров 409. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 00:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чем "operator *=" отличается от "operator *"? (C++):

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число" - C++
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс, перегрузил операторы сложения и умножения, в конструкторе...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

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

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

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

Вывод строки с 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;...

4
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
21.04.2011, 01:10 #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;
}
0
enoka
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 19
21.04.2011, 01:24  [ТС] #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;
}
вот что-то это не работает у меня.....
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
21.04.2011, 01:29 #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;
}
1
enoka
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 19
21.04.2011, 09:42  [ТС] #5
вот это уже работает)))
спасибо)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2011, 09:42
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
21.04.2011, 09:42
Ответ Создать тему
Опции темы

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