Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Class method() const; const Class& method() const; |
Автор: kemiisto 30.3.2009, 13:54 | ||||||
Пример:
Вообщем нужен инспектор, а не мутатор. А вот как его объявить? 1 или 2? Тело этого метода тривиально:
Используется, например, в методах класса Point3D:
Работает и так и так. А есть ли разница? P.S. Сильно не пинать. Я только начинаю... ![]() |
Автор: mes 30.3.2009, 14:47 |
2й вариант предпочтительнее, потому что не будет создавать дополнительных копий, например при передачи в такую функцию void fn (const Point3D& ) |
Автор: Acer 30.3.2009, 15:09 |
const нужен для того, чтобы сказать компилятору, что твой метод не будет менять свойства экземпляра класса. |
Автор: mes 30.3.2009, 15:12 | ||||
не только.. Тогда когда нужно отдать именно копию, а не ссылку на объект. Это нужно почувствовать, объяснить сложно ![]() Добавлено через 57 секунд
Acer, kemiisto не про этот const спрашивает ![]() |
Автор: Acer 30.3.2009, 15:24 | ||
Такая конструкция вернет тебе копию обьекта Class |
Автор: kemiisto 30.3.2009, 15:35 | ||
Да... Чуточку прояснилось... |
Автор: vinter 30.3.2009, 15:38 | ||||
это что за индокод? ![]()
|
Автор: baldina 30.3.2009, 15:39 | ||||||||
Действительно бывают случаи,
- когда объект временный (то, что упомянул kemiisto) - когда думаешь про семантику, а не оптимизацию - когда нужно отдать не константный объект, например имеющий нестандартную семантику присваивания а вот представим ситуацию, когда значение Point используется в цикле:
есть разница? а теперь представим, что s. centre_ может измениться. в этом случае один из вариантов будет работать неправильно. какой именно - зависит от задачи |
Автор: kemiisto 30.3.2009, 15:53 |
![]() baldina, я даже что то понял, из того, что Вы сказали. ![]() |
Автор: mes 30.3.2009, 23:51 |
не слишком ли грубо за лишнeе использование "if" ? |
Автор: vinter 31.3.2009, 07:50 | ||
нет
это как раз пример индокода, одного из ярчайших его проявлений |
Автор: baldina 31.3.2009, 09:57 | ||
![]() а меня, признаться, больше задел сам метод bool Point3D::isInside(const Sphere3D& sphere) const получается, что класс Point3D должен знать обо всех типах, внутри которых может находиться точка. логичнее bool isInside(const Point3D&, const Sphere3D& sphere) (эх, мультиметоды сюда бы) да и реализация... pow... sqrt... гм... навела на размышления ;-) почему не
|
Автор: kemiisto 31.3.2009, 10:14 | ||
Ещё раз спасибо всем за помощь. Но я попрошу воздержаться от комментариев не по теме. Во-первых, это только наброски. Во-вторых, это субъективная оценка. В-третьих, я не просил оценивать объектную модель.
baldina, есть ведь ещё базовый класс Primitive3D... Это же только набросок. Какой смысл обсуждать объектную иерархию без полноты картины. Я эту картину ещё и сам то не видел, а Вы... А есть какая то принципиальная разница? ![]() |
Автор: Lazin 31.3.2009, 10:27 | ||
очень даже объективная и правильная оценка ![]() точка не должна знать о всех фигурах в которые она может попадать или нет, это объекты геом. фигур должны уметь определять, принадлежит им точка или нет, либо можно сделать это функцией ![]() |
Автор: baldina 31.3.2009, 10:53 | ||
точность вычислений и быстродействие. не знаю, насколько это принципиально... ![]() |
Автор: kemiisto 31.3.2009, 10:55 | ||
Хм... Это постулат такой? Тогда, если не трудно, автор, книга, страница.
Lazin, функцией делать не хочеться. А вот сделать у каждого примитива метод определяющий принадлежность ему точки... Это мне больше по душе... Если вы настаиваете... |
Автор: baldina 31.3.2009, 11:13 |
kemiisto, я не собирался обсуждать объектную модель; я допускаю, что в определенных условиях подобное решение имеет право на жизнь (но, поверьте, прочитав "набросок", ход мысли автора становится очень понятен). а замечание носило общий характер: есть принцип в инженерии - чем меньше связей, тем надежнее система, тем проще её сопровождать и модернизировать. в применении к классам C++ это означает, что следует стремиться их делать по возможности независимыми друг от друга. хотите авторитетов? их есть у нас: http://www.helloworld.ru/texts/comp/other/oop/index.htm http://www.intuit.ru/department/se/ooad/ ничего личного ![]() |
Автор: kemiisto 31.3.2009, 11:30 | ||
Это да. Буча не перевариваю. А вот за Мейера спасибо. Не знал, что такое имеется... Eiffel, конечно, нечто. Но, человек, так сказать "подсидевший" ![]() |
Автор: Lazin 31.3.2009, 11:35 | ||||
я даже не знаю, в принципе это просто, если у тебя геом. фигуры состоят из точек, а точка знает про геом. фигуры, но это циклическая зависимость, а нужно, что-бы зависимости в коде, представляли из себя ацикличный направленный граф(ADG)
![]() |