Qraizer
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Цитата: Здесь выбор между красотой в ходе применения и избыточностью в классе? | Red Planet, я не имел в виду вообще их убрать. Я говорил, что им вероятно нечего делать в методах, и в качесвте свободных они более к месту. Вот и karakurt2 о том же: Цитата: хороший стиль программирования предполагает реализацию только необходимого минимума функций-членов класса. | Т.е. вот такой вид Код: template <class T> A<T> operator + (const A<T>& left, const A<T>& right) { A res; res.set_c() = left.get_c() + right.get_c(); res.set_d() = left.get_d() + right.get_d(); return res; } template <class T> A<T> operator - (const A<T>& left, const A<T>& right) { A res; res.set_c() = left.get_c() - right.get_c(); res.set_d( )= left.get_d() - right.get_d(); return res; } | выглядит вполне нормально. Тот факт, что эти операторы теперь лежат в глобальном доступе, пусть тебя пока не смущает. В "правильном" программировании имена классов более конкретные, нежели class A, а для инкапсуляции целиком всего интерфейса - не только самого класса, но и всякоразынх вспомогательных классов, типов, свободных функций, операторов, констант... в общем всего того, что к этому классу относится и считается интерфейсом работы с ним - придуманы пространства имён. Да-да, вовсе не "для разрешения конфликтов глобальных идентификаторов", как пишут в книжках "...для чайников" или там "... за 21 день". Эти конфликты настолько малая частность... что ИМХО не заслуживает даже упоминания. Цитата: Я раньше думал, что передавать по ссылке нужно только тогда, когда требуется изменить переданный объект, а в остальных случаях надо по значению. | Не только передача по значению сохраняет параметр неизменным. Константы тоже неизменяемы. Так что увидев в прототипе функции const Type& val, можно смело говорить, что эта функция даёт гарантию неизменения val. Просто нет особой мотивации передавать по ссылке простые типы, ссылки обойдутся не более эффективно, чем сами значения. Даже если у тебя простая структура, превышающая по размеру ссылку, не всегда имеет смысл экономить, если эта экономия оборачивается каким-нибудь другим оверхедом. Однако всё меняется, если это класс с тяжёлым конструктором копии. Тут, пожалуй, можно представить только одно исключение: внутри функции параметр меняется ею для своих личных нужд, и это изменение не должно быть видимо за её пределами. В этом случае, если передавать по ссылке, то внутри фнукции всё равно придётся делать копию, и менять её. Тогда уж проще просто передать по значению. У тебя класс хранит два элемента неизвестного тебе типа T. Что, если я придумаю экстракрутой класс для супервещественных чисел и захочу использовать твой A с ним? Поэтому тебе имеет смысл принимать параметры всё-таки по константной ссылке.
---------- Одни с годами умнеют, другие становятся старше. |
|