| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Перегрузка операций вычитания и смены знака с матр |
| Автор: astilla 20.1.2007, 14:32 | ||||
| Никак не могу сообразить, как сделать переграузку операции "смена знака" у матриц. перегрузку операции вычитания сделала, но вот что интересно получается Если использую такой код
то все правильно вычитается, то смена знака не получается а если такой
то "автоматически" получается "смена знака" Как правильно мне написать перегрузку этих операций? |
| Автор: GIK 20.1.2007, 14:41 | ||
Эт че такое то, через указатель что вызываешь? Кидай полный код. |
| Автор: Rockie 20.1.2007, 14:44 | ||||
тут логическое или, как понимаю
это смена знака только для положительных матриц? матрица и так может выглядеть: 1 -2 -3 4 Добавлено @ 14:49 astilla, если только для положительных матриц, то перегружай оператор -- и вычитай из матрицы
|
| Автор: Sartorius 20.1.2007, 14:53 | ||
прототип не тот... унарный минус без параметров
|
| Автор: SaDFromSpb 20.1.2007, 15:16 | ||||
| astilla, Если смена знака, о которой ты говоришь, это -m. (То есть просто поменять знак для одного класса). Значт тебе нужна форма operator-() без аргументов.
Так делать нехорошо. То, что выделилось по этой операции new, ты удалить уже не сможешь. Если нужно генерировать временный объект для далнейшего участия в операциях, следует использовать возвращение значения с размещением на стек. Добавлено @ 15:19 Добавлю, что когда я начал писать ответ, последним было сообщение Rockie Добавлено @ 15:27
Здесь так же проблема. Возвращается ссылка на автоматический объект, который тут же уничтожается. Результат - абракадабра. |
| Автор: astilla 20.1.2007, 15:28 |
| ОГРОМНОЕ все спасибо! Разобралась. Все получилось. Спасибо за то, что вы все есть |
| Автор: Sartorius 20.1.2007, 15:43 | ||
Ты ошибаешься. Компилятор в этом случае создает копию res. |
| Автор: SaDFromSpb 20.1.2007, 15:52 |
Я тоже об этом подумал сначала. Проверл. Мой компилятор (cl из VisualStudio) работает, как я описываю. Да и по семантике он не должен копироваться, если мы ссылку возвращаем. |
| Автор: Axxent 20.1.2007, 15:57 | ||
Если это и так, то скорее всего не везде, тем не менее в любом случае путать людей не стоит. Возвращать ссылку или указатель на объект созданный в стеке - не есть хорошо. |
| Автор: Sartorius 20.1.2007, 16:11 |
| SaDFromSpb, интересно. У мну VS2005 все работает корректно. |
| Автор: Axxent 20.1.2007, 16:21 |
| Sartorius, даже если таким макаром возвращать объекты с динамическим выделением памяти, освобождающие память в деструкторе? Очень-очень не верится. |
| Автор: SaDFromSpb 21.1.2007, 16:26 |
Убедись, что у твоего объекта вызывается копирующий конструктор именно при "возвращении" из метода (создай его реализацию с писалкой). (Он все-таки вряд ли вызвывается |