![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| shtuceron |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 17.2.2008 Репутация: нет Всего: нет |
Добрый вечер, сложилось представление о понимании приведения типов в С++, однако как оказалось это не так, поэтому прошу помощи в этом вопросе...
Есть класс Vector и дочерний Vector3, в классе Vector имеестя метод Normalize()
в дочернем классе его переопределяю
В чем здесь ошибка и как ее исправить. Спасибо. |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
В данном случае, имхо, вообще приведение не нужно
Добавлено через 3 минуты и 32 секунды И, кстати, зачем вы возвращаете сам объект? Не знаю что там у вас за остальной код, но это похоже, неправильное решение.. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
shtuceron, когда функция возвращает копию объекта (как в твоем случае, хотя ты запросто мог сделать возврат ссылки на объект), то создается временный объект (в стандарте называется rvalue). На такие объекты накладывается ряд ограничений. Главное из них - объект будет уничтожен после первой операции (упрощенно). Поэтому, обычно, такие объекты тупо присваивают.
|
|||
|
||||
| shtuceron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 17.2.2008 Репутация: нет Всего: нет |
volatile, вы совершенно правы.
остальной код - это по сути операции с векторами, а вы рекомендовали бы возвращать только данные или ссылку на объект, почему не сам объект (ему так же доступны переопределенные операторы) Это сообщение отредактировал(а) shtuceron - 19.6.2011, 21:38 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
shtuceron, mes абсолютно прав.
я не совсем точно выразился, я хотел сказать зачем вы возвращаете копию объекта?
Вообще-то это зависит от того как вы собираетесь использовать Normalize().. Ближе всего к тому что вы хотели сделать (я становлюсь телепатом!
Впрочем, лично я, в такой функции, не стал бы возвращать вообще ничего. Но это дело вкуса... |
||||
|
|||||
| afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: 1 Всего: 4 |
А вдруг пользователь вашего класса любит писать myObject.doSomething().doSomethingElse.andDoSomethingMore() ? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Согласись, это уже его [пользователя] проблемы. Имхо, нет практически никакой разницы, что возвращать. Да, возврат неконстантной ссылки на объект наиболее универсальное решение, но иногда оно может провоцировать на лишнее усложнение кода пользователем. Поэтому, разработчик имеет право отказаться от него в пользу, например, возврата bool или вообще ничего. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |