Я не пойму: вы для чего так хотите сами себя ограничить?
Думаете от этого ваша программа автоматически станет безопаснее?
Не станет! Скорее даже наоборот.
Именно лишние ограничения заставят вас когда-нибудь написать так:
Дружище, вижу ты кое-что знаешь в ООП, но вот его сути пока не улавливаешь.
Смотри:
////// Класс - меценат. Любой желающий может взять из его кошелька сколько хочет./// Если у нас монополия на меценатов, и он может быть только один, объявляем класс статическим
/// (на его работу это никак не повлияет).
///class Меценат
{
public:
/// Отдает нужное количество денегint GetMoney(int СколькоДенегВзять)
{
кошелек -= СколькоДенегВзять;
return СколькоДенегВзять;
}
private:
int кошелек;
};
Удивительно, что я закрыл переменную "кошелек", не смотря на то, что изначально идея класса в том, что бы сделать его кошелек доступный всем? Но если все будут брать сколько непопадя можно уйти в минус, а это невозможно. Сейчас функция GetMoney это позволяет, но стоит добавить несколько строк, и она уже не позволит взять большее количество денег что хранит кошелек. А теперь представь, что к классу "Меценат" обращаются десятки различных объектов с просьбой дать денег. В случае если переменная кошелек будет открыта, то каждому из этих объектов, также придется контролировать (т.е. иметь свою собственную реализацию) проверку на наличие достаточного количества денег. А если хотя бы в одном из них ее не будет, он рискуют вместо нуля получить отрицательное значение, что в итоге будет означать, что он попросил денег а в результате оказался еще и должен.
Дружище, вижу ты кое-что знаешь в ООП, но вот его сути пока не улавливаешь.
Смотри:
Удивительно, что я закрыл переменную "кошелек", не смотря на то, что изначально идея класса в том, что бы сделать его кошелек доступный всем? Но если все будут брать сколько непопадя можно уйти в минус, а это невозможно. Сейчас функция GetMoney это позволяет, но стоит добавить несколько строк, и она уже не позволит взять большее количество денег что хранит кошелек. А теперь представь, что к классу "Меценат" обращаются десятки различных объектов с просьбой дать денег. В случае если переменная кошелек будет открыта, то каждому из этих объектов, также придется контролировать (т.е. иметь свою собственную реализацию) проверку на наличие достаточного количества денег. А если хотя бы в одном из них ее не будет, он рискуют вместо нуля получить отрицательное значение, что в итоге будет означать, что он попросил денег а в результате оказался еще и должен.
C-4: Все правильно. Класс B обращается к внешнему классу А и хочет что бы защищенные переменные класса А были ему доступны. Где здесь логика не понимаю.
С правами доступа при наследовании довольно легко запутаться. Мало того, что для данных и функций класса в С++ есть целых три уровня доступа: , и , еще ведь можно и само наследование сделать , и . Самым загадочным их них является -наследование. Запутаться во всем этом зоопарке очень просто, поэтому я аккуратно расписала где какой уровень досупа...
Я не пойму: вы для чего так хотите сами себя ограничить?
Думаете от этого ваша программа автоматически станет безопаснее?
Не станет! Скорее даже наоборот.
Именно лишние ограничения заставят вас когда-нибудь написать так:
Дружище, вижу ты кое-что знаешь в ООП, но вот его сути пока не улавливаешь.
Смотри:
Удивительно, что я закрыл переменную "кошелек", не смотря на то, что изначально идея класса в том, что бы сделать его кошелек доступный всем? Но если все будут брать сколько непопадя можно уйти в минус, а это невозможно. Сейчас функция 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? Там индексация как в массивах?
Почему не включаются и не отображаются в терминале агенты MQL5 Cloud Network, при запуске с ключем /portrabl?
При запуске без ключа /portrabl , агенты отображаются и включаются.
включено: сервис ...разрешить публичный доступ- в обоих случаях
с ключем /portrabl:
заявки сервисдеск: #832323 , #833080.
Почему не включаются и не отображаются в терминале агенты, при запуске с ключем /portrabl?
При запуске без ключа /portrabl , агенты отображаются и включаются.
заявки сервисдеск: #832323 , #833080.
без ключа /portrable: