|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
||||||
Свойства класов - зачем помещать свойство в приват01.04.2012, 18:23. Показов 7391. Ответов 54
Метки нет (Все метки)
Очень часто встречал такие классы
PS. тут ещё мысля возникла, если в Си (не C++, а простой Си) небыло оператора new то получается небыло утечек памяти?
0
|
||||||
| 01.04.2012, 18:23 | |
|
Ответы с готовыми решениями:
54
Зачем нужно свойство @property (assign)
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 02.04.2012, 10:39 | |
|
0
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 02.04.2012, 13:06 | |
|
Там где-то в начале вопрошалось о косяках класса Vector3D. А вот они, степень важности от безразличной, до неработоспособности программы (сверху-вниз по файлу):
- Конструкторы не используют списки инициализации - Методы cross, dot должны быть константными. - Операторы +/- должны быть функциями, а не методами. Но в данном случае это не критично, т.к. нет преобразовывающего конструктора. - operator [] не работоспособен. Ты удивишься, но выравнивание на 4 байта уже стало большой редкостью. Данный метод в двух случаях из трёх вернёт мусор. - float * , то же, что и выше. - Большинство методов должны быть функциями в пространстве имён этого класса - Одни и те же операторы объявлены и как методы и как функции. Как-то так.
0
|
|
|
|
||||||
| 02.04.2012, 13:23 | ||||||
|
Но пока что всё, к чему вы пришли это "для отладки". Я, как новичок, считаю, что лучше всего учиться на примерах. Но все примеры, которые я видел меня пока не убеждают. Ну, вот хотя бы этот ваш "контроль диапазона присваемого". Ну скажите, зачем мне ограничивать диапазон в классе Vector3D??? Что вообще может быть в сеттере вектора, кроме x=tx;y=ty... ? Прочитайте первый пост! Речь же шла именно о таких ситуациях, когда нечего написать в сеттере, кроме сеттинга! Или вот обругали тут этот класс за говнокод. Ну и что, но он же работает? В этом то и основной вопрос ТС. Зачем ораничиать самого себя в доступе (себя, а не мифических "других пользователей", которых во многих программах, особенно учебных и не существует). И не надо тут давить авторитетом "публикаций". ТС привёл конкретный пример геттера/сеттера, которые ничего не делают. Что мешает вместо этого сделать поле публичным? Покажите публикацию, которая требовала бы создавать такие пустые гетсеттеры. И опять заводите речь о "больших и сложных программах". Но как показывает практика, немалая часть программистов пихают прайват поля даже в простые программы. Или вы даже разрабатывая "Тетрис" завернёте все данные в приватные поля классов?
0
|
||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||
| 02.04.2012, 13:38 | ||||||
|
Добавлено через 1 минуту
2
|
||||||
|
|
||||||||||||
| 02.04.2012, 13:49 | ||||||||||||
|
Ага, а разрабатывая "Тетрис" вы тоже завернёте в него 100500 приватных полей, "на всякий случай", "чтобы случайно всё не испортить". Вместо того, чтобы взять и забыть про ООП на время разработки простой программы.
Вопрос стоял о данных, которые вы объявляете приватными, но тут же открываете к ним доступ гетсеттерами.
В чём отличие в применении
0
|
||||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 02.04.2012, 14:13 | ||||||
|
Kuzia domovenok, Хм. Ну. Желательно бы нечто вроде.
1
|
||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||
| 02.04.2012, 14:14 | ||||
|
Там выше где-то был пример с полями a,b,c и методами доступа гарантировалось, что с равно сумме a и b. Так это ошибка проектирования. Поле с там вообще не нужно, т.к. оно вычисляется из a и b. Т.е., когда разработчик обнаружит эту ошибку, он просто удалит поле с и исправит реализацию пары методов и ему не придётся изменять 100500 вызовов этих методов. А что бы пришлось делать, если бы непосредственно обращение происходило к полю с? Как использовать переменную, которой больше нет? Пришлось бы везде писать a+b или вводить таки новую функцию. А теперь представь, что это всё происходит в dll, которой пользуется куча народа. Сколько матерных слов ты услышишь в свой адрес из-за того, что им придётся рефакторить все свои приложения?
1
|
||||
|
Модератор
12844 / 7593 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
|
||||
| 02.04.2012, 14:36 | ||||
|
1
|
||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||||
| 02.04.2012, 14:59 | ||||||||
|
Добавлено через 2 минуты
2
|
||||||||
|
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
|
|||
| 02.04.2012, 15:02 | |||
0
|
|||
| 02.04.2012, 15:09 | |
|
Не по теме: M128K145, когда человек учится, он не рассуждает о высоких материях. Это то же самое, как если бы я сказал своей первой учительнице, что "чк" и "чн" пишется с мягким знаком потому, что мой друг-гопник их так пишет.
0
|
|
| 02.04.2012, 15:27 | |
|
0
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 02.04.2012, 15:29 | |
|
0
|
|
|
|
|||||||
| 02.04.2012, 18:40 | |||||||
|
[QUOTE]IDrawer::draw(const std::shared_ptr<Shape>& shape);[QUOTE]
Ой, вот только не надо этих извращений. Мы на первых страницах определились, что программа пишется в одиночку, и не претендует на звание "универсальногововсесторонырасширяем ого движка". Смысл тогда плодить в ней сущности?
Давай не будем о них, об интерфейсах и виртуальности. просто потому что нигде не сказано, что у меня класс Shape абстрактный и взят из известного Страуструпповского примера. Может я имел в виду вполне конкретный Шейп?
Но мне всё равно кажется, что такие механизмы, как использование триггеров, планируются до того, как мы решили создавать этот класс.
0
|
|||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||||||
| 02.04.2012, 18:57 | ||||||||||
Сообщение было отмечено как решение
Решение![]() И о чисто виртуальных я слова не говорил. ![]()
3
|
||||||||||
| 02.04.2012, 18:57 | |
|
Зачем всегда инкапсулировать переменные в свойства Зачем нужны автоматически реализуемые свойства?
Зачем использовать поля, если есть свойства? Как назначить свойства блоку div через свойство SetAttribute? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|