![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| astilla |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
Никак не могу сообразить, как сделать переграузку операции "смена знака" у матриц.
перегрузку операции вычитания сделала, но вот что интересно получается Если использую такой код
то все правильно вычитается, то смена знака не получается а если такой
то "автоматически" получается "смена знака" Как правильно мне написать перегрузку этих операций? |
||||
|
|||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
Эт че такое то, через указатель что вызываешь? Кидай полный код. -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| Rockie |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
тут логическое или, как понимаю
это смена знака только для положительных матриц? матрица и так может выглядеть: 1 -2 -3 4 Добавлено @ 14:49 astilla, если только для положительных матриц, то перегружай оператор -- и вычитай из матрицы
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Я бы не парился, оператор- оставил бы для вычитания матриц, а для смены знака добавил бы метод вроде Neg или подобный. Перегрузка операция предназначена для повышения читабельности программы. Не всегда и не все действия необходимо перегружать. Мне кажется, что вынос отдельного метода для смены знака было бы разумно. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
прототип не тот... унарный минус без параметров
Это сообщение отредактировал(а) Sartorius - 20.1.2007, 14:56 |
|||
|
||||
| SaDFromSpb |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
astilla,
Если смена знака, о которой ты говоришь, это -m. (То есть просто поменять знак для одного класса). Значт тебе нужна форма operator-() без аргументов.
Так делать нехорошо. То, что выделилось по этой операции new, ты удалить уже не сможешь. Если нужно генерировать временный объект для далнейшего участия в операциях, следует использовать возвращение значения с размещением на стек. Добавлено @ 15:19 Добавлю, что когда я начал писать ответ, последним было сообщение Rockie Добавлено @ 15:27
Здесь так же проблема. Возвращается ссылка на автоматический объект, который тут же уничтожается. Результат - абракадабра. Это сообщение отредактировал(а) SaDFromSpb - 20.1.2007, 15:30 -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
||||
|
|||||
| astilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
ОГРОМНОЕ все спасибо!
Разобралась. Все получилось. Спасибо за то, что вы все есть |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Ты ошибаешься. Компилятор в этом случае создает копию res. |
|||
|
||||
| SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Я тоже об этом подумал сначала. Проверл. Мой компилятор (cl из VisualStudio) работает, как я описываю. Да и по семантике он не должен копироваться, если мы ссылку возвращаем. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
| Axxent |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Если это и так, то скорее всего не везде, тем не менее в любом случае путать людей не стоит. Возвращать ссылку или указатель на объект созданный в стеке - не есть хорошо. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
SaDFromSpb, интересно. У мну VS2005 все работает корректно.
|
|||
|
||||
| Axxent |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Sartorius,
даже если таким макаром возвращать объекты с динамическим выделением памяти, освобождающие память в деструкторе? Очень-очень не верится. |
|||
|
||||
| SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Убедись, что у твоего объекта вызывается копирующий конструктор именно при "возвращении" из метода (создай его реализацию с писалкой). (Он все-таки вряд ли вызвывается Это сообщение отредактировал(а) SaDFromSpb - 21.1.2007, 16:28 -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |