Ошибки, баги, вопросы - страница 1057

 
Zloy_Koldun:

Я не пойму: вы для чего так хотите сами себя ограничить?

Думаете от этого ваша программа автоматически станет безопаснее?

Не станет! Скорее даже наоборот.

Именно лишние ограничения заставят вас когда-нибудь написать так:

Дружище, вижу ты кое-что знаешь в ООП, но вот его сути пока не улавливаешь.

Смотри:

///
/// Класс - меценат. Любой желающий может взять из его кошелька сколько хочет.
/// Если у нас монополия на меценатов, и он может быть только один, объявляем класс статическим
/// (на его работу это никак не повлияет).
///
class Меценат
{
    public:
      /// Отдает нужное количество денег
      int GetMoney(int СколькоДенегВзять)
      {
          кошелек -= СколькоДенегВзять;
          return СколькоДенегВзять;
      }
    private:
       int кошелек;
};
Удивительно, что я закрыл переменную "кошелек", не смотря на то, что изначально идея класса в том, что бы сделать его кошелек доступный всем? Но если все будут брать сколько непопадя можно уйти в минус, а это невозможно. Сейчас функция GetMoney это позволяет, но стоит добавить несколько строк, и она уже не позволит взять большее количество денег что хранит кошелек. А теперь представь, что к классу "Меценат" обращаются десятки различных объектов с просьбой дать денег. В случае если переменная кошелек будет открыта, то каждому из этих объектов, также придется контролировать (т.е. иметь свою собственную реализацию) проверку на наличие достаточного количества денег. А если хотя бы в одном из них ее не будет, он рискуют вместо нуля получить отрицательное значение, что в итоге будет означать, что он попросил денег а в результате оказался еще и должен.
[Удален]  
C-4:

Дружище, вижу ты кое-что знаешь в ООП, но вот его сути пока не улавливаешь.

Смотри:

Удивительно, что я закрыл переменную "кошелек", не смотря на то, что изначально идея класса в том, что бы сделать его кошелек доступный всем? Но если все будут брать сколько непопадя можно уйти в минус, а это невозможно. Сейчас функция GetMoney это позволяет, но стоит добавить несколько строк, и она уже не позволит взять большее количество денег что хранит кошелек. А теперь представь, что к классу "Меценат" обращаются десятки различных объектов с просьбой дать денег. В случае если переменная кошелек будет открыта, то каждому из этих объектов, также придется контролировать (т.е. иметь свою собственную реализацию) проверку на наличие достаточного количества денег. А если хотя бы в одном из них ее не будет, он рискуют вместо нуля получить отрицательное значение, что в итоге будет означать, что он попросил денег а в результате оказался еще и должен.
Я против приватного кошелька ничего не имел. Разговор начался вот с этого:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
 
Zloy_Koldun:
Я против приватного кошелька ничего не имел. Разговор начался вот с этого:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
Все правильно. Класс B обращается к внешнему классу А и хочет что бы защищенные переменные класса А были ему доступны. Где здесь логика не понимаю.
 
C-4:
Все правильно. Класс B обращается к внешнему классу А и хочет что бы защищенные переменные класса А были ему доступны. Где здесь логика не понимаю.
Причём здесь логика.  Хочется же..!
 
MetaDriver:
Причём здесь логика.  Хочется же..!

http://alenacpp.blogspot.com/2006/03/blog-post_11.html

protected модификатор та еще шлюха. Редко когда он действительно нужен.

Труъ инкапсуляция предполагает приватность данных.

Права доступа при наследовании
  • 2006.03.11
  • alenacpp.blogspot.com
С правами доступа при наследовании довольно легко запутаться. Мало того, что для данных и функций класса в С++ есть целых три уровня доступа: , и , еще ведь можно и само наследование сделать , и . Самым загадочным их них является -наследование. Запутаться во всем этом зоопарке очень просто, поэтому я аккуратно расписала где какой уровень досупа...
 
Подскажите, чтобы через SymbolName() выбрать самый первый символ - в pos надо поставить 1 или 0? Там индексация как в массивах?
 
paladin800:
Подскажите, чтобы через SymbolName() выбрать самый первый символ - в pos надо поставить 1 или 0? Там индексация как в массивах?
Так проверить легко: Print.
 
paladin800:
Подскажите, чтобы через SymbolName() выбрать самый первый символ - в pos надо поставить 1 или 0? Там индексация как в массивах?
Да, от нуля.
 

Почему не включаются и не отображаются в терминале агенты MQL5 Cloud Network, при запуске с ключем /portrabl?

  При запуске без ключа /portrabl , агенты отображаются и включаются.

включено: сервис ...разрешить публичный доступ- в обоих случаях

 

  с ключем /portrabl:

заявки сервисдеск: #832323 , #833080.

 

Почему не включаются и не отображаются в терминале агенты, при запуске с ключем /portrabl?

  При запуске без ключа /portrabl , агенты отображаются и включаются.

заявки сервисдеск: #832323 , #833080.

 

без   ключа /portrable: