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

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

Восстановить пароль Регистрация
 
soirkar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 20
17.01.2012, 18:44     Класс Матрица, перегрузка оператора *= #1
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;
}
Написал следующее, каким еще способом можно перегрузить оператор *= и почему первый наиболее эффективный?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
17.01.2012, 18:54     Класс Матрица, перегрузка оператора *= #2
Цитата Сообщение от soirkar Посмотреть сообщение
почему первый наиболее эффективный?
А вы второй покажите, мы ответим.
soirkar
0 / 0 / 0
Регистрация: 22.06.2011
Сообщений: 20
17.01.2012, 19:03  [ТС]     Класс Матрица, перегрузка оператора *= #3
Если бы я его написал, то сравнил бы эффективность выводом сообщений о использовании конструкторов / деструкторов.
silent_1991
Эксперт C++
4938 / 3014 / 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     Класс Матрица, перегрузка оператора *=
Ответ Создать тему
Опции темы

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