![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| nobody0 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.12.2010 Репутация: нет Всего: нет |
Вот часть класса:
Вопрос: почему когда в функции, перегружаемой оператор +, возвращаемое значение просто R, то возвращается черти что, а если возвращать Polynomial( R ), т.е. возвращая копию этого объекта, все так, как и должно быть? P.S. Черт, я же хотел создать тему в форуме новичков... Если несложно, перенесите тему туда, пожалуйста. Это сообщение отредактировал(а) nobody0 - 20.2.2011, 14:31 |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
nobody0, наверняка не скажу, но вот соображения
если делаете
то при return R; будет вызван конструктор копирования если делать return Polynomial(degR) то конструктор копирования вызван не будет, вызовется только один конструктор судя по всему проблема в конструкторе копирования |
|||
|
||||
| nobody0 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.12.2010 Репутация: нет Всего: нет |
Так второй же вариант другой:
Т.е. вызывается функция с переданным в нее объектом класса и возвращает тоже объект класса, т.е. копирует объект. И только в таком случае возвращается то, что нужно. Это сообщение отредактировал(а) nobody0 - 20.2.2011, 14:46 |
||||
|
|||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
nobody0, таки покажите хотя бы свой конструктор копирования.
-------------------- |
|||
|
||||
| nobody0 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.12.2010 Репутация: нет Всего: нет |
kemiisto,
Но зачем он, если он работает верно? |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Небольшое уточнение.
Проблема не в конструкторе копирования, а в операторе копирования. Нужно сделать нормальный оператор копирования
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
volatile, и как же оно по-твоему тогда "работает", если вернуть не X, а Polynomial(X)?
Нет, тут нужен весь код. Полностью. ТС что-то явно не договаривает... Это сообщение отредактировал(а) kemiisto - 20.2.2011, 14:55 -------------------- |
|||
|
||||
| nobody0 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.12.2010 Репутация: нет Всего: нет |
__
Это сообщение отредактировал(а) nobody0 - 23.3.2011, 20:03 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
| nobody0 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.12.2010 Репутация: нет Всего: нет |
А я думал, что конструктор копирования используется таким образом:
У Вас, так понимаю, второй вариант его использования? В любом случае, такая конструкция у меня не использована. Это сообщение отредактировал(а) nobody0 - 20.2.2011, 15:08 |
||||
|
|||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Упс, вашего кода еще не смотрел. запостили пока писал.
Ну это мой стиль. Добавлено @ 15:09
Polynomial A(B); // конструктор копирования, правильно! Polynomial A = B; // тоже конструктор копирования! Это сообщение отредактировал(а) volatile - 20.2.2011, 15:11 |
|||
|
||||
| nobody0 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.12.2010 Репутация: нет Всего: нет |
Если что, вот часть того, что есть в главной функции программы:
Оператор вывода перегружен так:
Несколько недоработанных условий лишь для более корректного вывода в привычном виде. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
второе выражение является формой записи первого, в отличии от "A = B;", где уже участвует оператор присваивания.. Добавлено через 1 минуту и 40 секунд может скажете и в чем заключается ошибочность результата ? |
|||
|
||||
| nobody0 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.12.2010 Репутация: нет Всего: нет |
mes,
... на данный момент работает верно... ... Очень странно. Раньше были коэффициенты неверные — огромные числа. Неужели я что-то в коде функций менял... Спасибо. Тема может быть закрыта. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |