| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Приведение типов |
| Автор: shtuceron 19.6.2011, 20:40 | ||||
| Добрый вечер, сложилось представление о понимании приведения типов в С++, однако как оказалось это не так, поэтому прошу помощи в этом вопросе... Есть класс Vector и дочерний Vector3, в классе Vector имеестя метод Normalize()
в дочернем классе его переопределяю
В чем здесь ошибка и как ее исправить. Спасибо. |
| Автор: volatile 19.6.2011, 21:04 | ||
В данном случае, имхо, вообще приведение не нужно
Добавлено через 3 минуты и 32 секунды И, кстати, зачем вы возвращаете сам объект? Не знаю что там у вас за остальной код, но это похоже, неправильное решение.. |
| Автор: bsa 19.6.2011, 21:35 |
| shtuceron, когда функция возвращает копию объекта (как в твоем случае, хотя ты запросто мог сделать возврат ссылки на объект), то создается временный объект (в стандарте называется rvalue). На такие объекты накладывается ряд ограничений. Главное из них - объект будет уничтожен после первой операции (упрощенно). Поэтому, обычно, такие объекты тупо присваивают. |
| Автор: shtuceron 19.6.2011, 21:36 | ||
volatile, вы совершенно правы.
остальной код - это по сути операции с векторами, а вы рекомендовали бы возвращать только данные или ссылку на объект, почему не сам объект (ему так же доступны переопределенные операторы) |
| Автор: volatile 19.6.2011, 23:27 | ||||
| shtuceron, mes абсолютно прав. я не совсем точно выразился, я хотел сказать зачем вы возвращаете копию объекта?
Вообще-то это зависит от того как вы собираетесь использовать Normalize().. Ближе всего к тому что вы хотели сделать (я становлюсь телепатом!
Впрочем, лично я, в такой функции, не стал бы возвращать вообще ничего. Но это дело вкуса... |
| Автор: afiskon 20.6.2011, 06:45 | ||
А вдруг пользователь вашего класса любит писать myObject.doSomething().doSomethingElse.andDoSomethingMore() ? |
| Автор: bsa 20.6.2011, 10:13 | ||
Согласись, это уже его [пользователя] проблемы. Имхо, нет практически никакой разницы, что возвращать. Да, возврат неконстантной ссылки на объект наиболее универсальное решение, но иногда оно может провоцировать на лишнее усложнение кода пользователем. Поэтому, разработчик имеет право отказаться от него в пользу, например, возврата bool или вообще ничего. |