|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
||||||
Свойства класов - зачем помещать свойство в приват01.04.2012, 18:23. Показов 6640. Ответов 54
Метки нет (Все метки)
Очень часто встречал такие классы
PS. тут ещё мысля возникла, если в Си (не C++, а простой Си) небыло оператора new то получается небыло утечек памяти?
0
|
||||||
| 01.04.2012, 18:23 | |
|
Ответы с готовыми решениями:
54
Зачем нужно свойство @property (assign)
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 01.04.2012, 18:26 | |
|
0
|
|
|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
|
| 01.04.2012, 18:31 [ТС] | |
|
Спасибо прочитал, но так и не понял в чём преймущество? Ну если не брать тот факт что в метода можно делать всевозможные проверки. Предположим что класс написал я сам и использовать его буду тоже я, что мне даёт такой метод?
0
|
|
|
|
|||||||||||||||||
| 01.04.2012, 19:41 | |||||||||||||||||
|
Вот помню, то ли у Страуструпа, то ли ещё в какой классике был пример класс "сумма чисел" и он выглядел так
Ещё скрывают поля класса-указатели, в которых выделена динамическая память, чтобы она выделялась/удалялась по правилам (например только в конструкторе, деструкторе и при копировании) и никто другой не мог бы создать утечку. Это тоже хорошее дело! Например
Но это не означает, что надо брать идиотскую моду постоянно скрывать всё что нужно и не нужно. Вообще всё! Например класс Vector3D я бы спокойно совершенно объявил так:
Добавлено через 28 минут А вообще часто скрывают поля класса, чтобы следовать концепции "сокрытия реализации". То есть для пользователя класса оставляют открытыми для использования лишь несколько "рычагов воздействия" - методов класса. При этом подразумевается, что создав класс, программист может передать его своим коллегам, или "себе самому" так, что продолжая работу с этим классом можно забыть все сложности структур и алгоритмов скрытых внутри, абстрагироваться от них. Таким образом создавать всё более сложные программы, оперируя простыми понятиями: Например создал класс render3D и его пользователей совершенно не беспокоит DirectX так выводит 3D картинку или OpenGL. Они воздействуют на класс методами "нарисуй то" да "нарисуй сё". При этом изменения внутренних полей класса нам не важно, а мы сосредотачиваемся на более нужных вещах.
1
|
|||||||||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 01.04.2012, 19:59 | ||
|
Добавлено через 3 минуты Kuzia domovenok, опять вы за своё? Начинающим-то хоть голову не забивайте, пусть учатся делать правильно, не всё же время они хеллоуворлды писать будут, в которых нет таких понятий как "расширяемость", "изменение условий задачи" и т.д.
0
|
||
|
|
||
| 01.04.2012, 20:21 | ||
|
И второе, раз уж у меня голова "не тем забита", покажи мне хоть одного автора книг по Си++, который бы советовал "Скрывать все поля класса, вне зависимости от задачи". А то я конечно искренне хочу улучшить своё знание си++, но как-то авторам публикаций больше верю, чем тебе
0
|
||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||
| 01.04.2012, 20:37 | ||
|
1
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 01.04.2012, 20:39 | ||
|
Kuzia domovenok, ищите моё предыдущее сообщение, когда вы в прошлый раз подняли этот вопрос.
Относительно вашего класса - причина банальна. Если мы захотим хранить вектор в виде массива (например, std::array), чтобы, например, была возможно вернуть сразу все три координаты, то весь код, написанный с использованием предыдущей версии вектора, полетит к чертям.
1
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
||
| 01.04.2012, 20:42 | ||
|
0
|
||
|
|
|||
| 01.04.2012, 20:51 | |||
|
Далее, я хочу добавить в класс методы получения модуля этого вектора, операторы скалярного и векторного умножения, векторного сложения и ещё 100500 операций над векторами зачем мне делать его структурой? Да, знаю в С++ структуры могут содержать методы, но в таком виде они мало отличаются от классов. Ну и наконец, я этот пример с вектором не от балды взял, а реально существует куча примеров исходников, в которых авторы не прячут параноидально все поля в public, просто потому что "так модно". (Разумеется имеется в виду не динам.память, о которой я уж сто раз оговорился в теме, а обычное поле, которое бы вызвало тонну ужаса из-за публичности) Ну же! Примеры где?
1
|
|||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|||
| 01.04.2012, 20:58 | |||
|
0
|
|||
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
| 01.04.2012, 21:06 | |
|
0
|
|
|
|
||
| 01.04.2012, 21:08 | ||
|
Автор, кстати большой сторонник ООП, и всячески использует и наследование и полиморфизм и reference counting в программах делает и.т.д. Но делает это с умом и у него нет параноидального желания писать для каждого поля класса сеттер и геттер. Если поле скрыто - на то есть причина. Вот тот самый его вектор, пример которого я привёл http://sigelengine.googlecode.... vector3d.h Ещё вопросы? Может кто-нибудь возразит аргументированно, чего не хватает в этом конкретном коде, а не станет продолжать "так надо, потому что это хороший тон"
0
|
||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||
| 01.04.2012, 21:15 | ||
|
никакого контроля значений не присутствует в продакшене геттерами и сеттерами покрывают чуть более сложные вещи для критического быстродействия это правильный ход, но с точки зрения расширяемости скорее всего нет захоти он добавить какойнить thread-safety и его интерфейс развалится
0
|
||
|
|
||
| 01.04.2012, 21:34 | ||
|
Но скрывать то, что кто угодно может изменить геттером и сеттером - очевидная глупость!
0
|
||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 01.04.2012, 21:47 | |
|
как минимум ТСа это лишит возможности контролировать валидность устанавливаемых значений
(почему бы не сделать A().count = -1; ) с практической же точки зрения так проще отлаживать (при установке значения не через сеттеры отлавливать изменения можно лишь на уровне watchpoint'ов)
0
|
|
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
||
| 01.04.2012, 22:02 | ||
Сообщение было отмечено как решение
Решение- использование макросов, вместо констант - конструктор копирования не делает ничего, чего бы не сделал генеренный компилятором, не нужен - часть операторов является членами, часть нет, при ни одному из операторов не нужен доступ к закрытой части, причем все свободные операторы зачем-то объявлены друзьями - операторы сравнения возвращают int - почему часть методов делают inplace модификацию объекта (negative), а часть возвращают измененную копию (cross)
4
|
||
| 01.04.2012, 22:12 | |
|
2
|
|
|
|
|
| 01.04.2012, 22:26 | |
|
0
|
|
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
||
| 01.04.2012, 22:44 | ||
|
0
|
||
| 01.04.2012, 22:44 | |
|
Помогаю со студенческими работами здесь
20
Зачем всегда инкапсулировать переменные в свойства Зачем нужны автоматически реализуемые свойства?
Зачем использовать поля, если есть свойства? Как назначить свойства блоку div через свойство SetAttribute? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|