Ошибки, баги, вопросы - страница 1057
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Кошелёк это всего лишь частный случай. И никто не мешает поместить его в приватную часть.
В другом случае может понадобиться доступ к переменной родительского класса чужого объекта.
И это должен программист решать, разрешать или нет. А компилятор должен обеспечить корректную работу программы.
В том-то и дело, если у Вас возникает этот самый другой случай, то значит Ваша архитектура концептуально неверна и потенциально опасна.
В С++ в свое время была введена неудачная концепция т.к. называемых дружественных классов. Типа если один класс знает как устроен другой, то он вполне безопасно может работать с его внутренними данными. Практика использования тысячами программистов по всему миру показала что это опасная вещь, создающая больше проблем, чем решающая, поэтому в современных языках вроде Java и C# от нее отказались.
Эта особенность неприятно удивила. Однозначно это херь полная, если компилятор позволяет менять приватное поле чужого экземпляра. Надо бы в сервисдеск запостить.
Я не пойму: вы для чего так хотите сами себя ограничить?
Думаете от этого ваша программа автоматически станет безопаснее?
Не станет! Скорее даже наоборот.
Именно лишние ограничения заставят вас когда-нибудь написать так:
Дружище, вижу ты кое-что знаешь в ООП, но вот его сути пока не улавливаешь.
Смотри:
Удивительно, что я закрыл переменную "кошелек", не смотря на то, что изначально идея класса в том, что бы сделать его кошелек доступный всем? Но если все будут брать сколько непопадя можно уйти в минус, а это невозможно. Сейчас функция GetMoney это позволяет, но стоит добавить несколько строк, и она уже не позволит взять большее количество денег что хранит кошелек. А теперь представь, что к классу "Меценат" обращаются десятки различных объектов с просьбой дать денег. В случае если переменная кошелек будет открыта, то каждому из этих объектов, также придется контролировать (т.е. иметь свою собственную реализацию) проверку на наличие достаточного количества денег. А если хотя бы в одном из них ее не будет, он рискуют вместо нуля получить отрицательное значение, что в итоге будет означать, что он попросил денег а в результате оказался еще и должен.Дружище, вижу ты кое-что знаешь в ООП, но вот его сути пока не улавливаешь.
Смотри:
Удивительно, что я закрыл переменную "кошелек", не смотря на то, что изначально идея класса в том, что бы сделать его кошелек доступный всем? Но если все будут брать сколько непопадя можно уйти в минус, а это невозможно. Сейчас функция GetMoney это позволяет, но стоит добавить несколько строк, и она уже не позволит взять большее количество денег что хранит кошелек. А теперь представь, что к классу "Меценат" обращаются десятки различных объектов с просьбой дать денег. В случае если переменная кошелек будет открыта, то каждому из этих объектов, также придется контролировать (т.е. иметь свою собственную реализацию) проверку на наличие достаточного количества денег. А если хотя бы в одном из них ее не будет, он рискуют вместо нуля получить отрицательное значение, что в итоге будет означать, что он попросил денег а в результате оказался еще и должен.Я против приватного кошелька ничего не имел. Разговор начался вот с этого:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
Все правильно. Класс B обращается к внешнему классу А и хочет что бы защищенные переменные класса А были ему доступны. Где здесь логика не понимаю.
Причём здесь логика. Хочется же..!
http://alenacpp.blogspot.com/2006/03/blog-post_11.html
protected модификатор та еще шлюха. Редко когда он действительно нужен.
Труъ инкапсуляция предполагает приватность данных.
Подскажите, чтобы через SymbolName() выбрать самый первый символ - в pos надо поставить 1 или 0? Там индексация как в массивах?
Подскажите, чтобы через SymbolName() выбрать самый первый символ - в pos надо поставить 1 или 0? Там индексация как в массивах?