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

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

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

Класс Матрица, перегрузка оператора *= - C++

17.01.2012, 18:44. Просмотров 551. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
matrix& matrix :: operator *= (const matrix& x1) 
{
    if( СhM(x1) ) //СhM - проверка на возможность умножения двух матриц
    {
        *this=this*x1;
    } 
    
    else throw "ERROR"; 
    return *this;
}
Написал следующее, каким еще способом можно перегрузить оператор *= и почему первый наиболее эффективный?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2012, 18:44     Класс Матрица, перегрузка оператора *=
Посмотрите здесь:

Перегрузка оператора += C++
C++ Перегрузка оператора ==, в классе Матрица
Класс "Матрица": конструктор, деструктор и перегрузка операторов C++
Перегрузка оператора * C++
C++ Виртуальный класс и перегрузка оператора
C++ Перегрузка оператора <
C++ Перегрузка оператора []
перегрузка оператора () C++
Перегрузка оператора << C++
C++ Перегрузка оператора ++
Матрица n*n перегрузка оператора * C++
Перегрузка оператора = C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,111
17.01.2012, 18:54     Класс Матрица, перегрузка оператора *= #2
Цитата Сообщение от soirkar Посмотреть сообщение
почему первый наиболее эффективный?
А вы второй покажите, мы ответим.
soirkar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 20
17.01.2012, 19:03  [ТС]     Класс Матрица, перегрузка оператора *= #3
Если бы я его написал, то сравнил бы эффективность выводом сообщений о использовании конструкторов / деструкторов.
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2012, 19:07     Класс Матрица, перегрузка оператора *= #4
soirkar, можно продублировать код из operator*, но это может повлечь за собой одну неприятную вещь: если вдруг понадобится что-то изменить в операторе умножения, то в данном случае придётся изменить код только в одном месте, а во втором случае придётся делать изменения в обоих операторах. Неприятная эта вещь потому, что можно забыть произвести изменения в одном из операторов и получить неэквивалентную работу.
А вообще, лучше перегружать operator* на основе operator*=, а не наоборот, потому что operator* логичнее перегрузить вне класса, а чтобы не использовать friend и вообще не нарушать инкапсуляцию, эту перегрузку можно осуществить через operator*=, который обязан быть членом класса. То же относится к любым другим бинарным операторам.

Добавлено через 1 минуту
А если речь об эффективности в плане производительности, то не думаю, что такой способ более эффективный. Ведь то, что можно сделать напрямую, с сырыми данными, тут делается через дополнительные вызовы методов (operator* и operator=), что понесёт дополнительные затраты.
Yandex
Объявления
17.01.2012, 19:07     Класс Матрица, перегрузка оператора *=
Ответ Создать тему
Опции темы

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