Вопросы по ООП в MQL5 - страница 57

 
Dmitry Fedoseev:

Где доступ к x из С2?
Повторяю, вложенных класс - это только вопрос видимости класса для создания объекта. Объект класса С2 можно создать только внутри класса C1. И все. Это единственное отличие от записи типа:
Но вы, конечно же, вложенным классом что-то другое называете? Расскажите что.

Речь о следующем:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Vladimir Simakov, 2020.05.16 21:11

class Originator
  {
   int               state;
public:
   class Memento;
   Originator() : state(0){}
   Memento*          getMemento()      {return new Memento(&this);}
   void              setState(int s)   {state=s;}
   void              dumpState()       {printf("State: %i", state);}
///////////////////////////////////////////////////////////
   class Memento{
      int            state;
      Originator*    org;
      public:
                     Memento(Originator* mOrg):state(mOrg.state),org(mOrg){}
      void           restoreState() {org.state=state;}
   };
///////////////////////////////////////////////////////////
  };

Почему нет ошибки: cannot access to private member?
ОТВЕТ: По тому что Memento вложенный (Nested/Internal) класс по отношению к Originator

 
Sergey Dzyublik:

Речь о следующем:

А где доступ к полям другого класса?

 
Dmitry Fedoseev:

А где доступ к полям другого класса?

Вы издеваетесь, автор поста специально для одаренных выделил его желтым цветом...

 
Sergey Dzyublik:

Вы издеваетесь, автор поста специально для одаренных выделил его желтым цветом...

Вижу. Только, кажется, вчера он был не такой. https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Но этот товарищ из вашего клуба... поэтому все нормально, да?

Сделаю даже скриншотик на память:

123

 
Dmitry Fedoseev:

Вижу. Только, кажется, вчера он был не такой. https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Но этот товарищ из вашего клуба... поэтому все нормально, да?

Сделаю даже скриншотик на память:

У вас с психикой все ОК?
Вам наводят конкретный пост с выделениями, вы тупите, но даже этого не можете принять и ссылаетесь на  непонятный пост из совсем другой темы, только что бы хоть как-то оправдать себя...
Удачи...

 
Sergey Dzyublik:

У вас с психикой все ОК?
Вам наводят конкретный пост с выделениями, вы тупите, но даже этого не можете принять и ссылаетесь на  непонятный пост из совсем другой темы, только что бы хоть как-то оправдать себя...
Удачи...

Ссылаюсь на пост из этой же темы, на тот пост с которого и началось все это обсуждение. Не видно из какой темы этот пост? Поэтому возникает вопрос, а может у вас что-то с психикой?

И не затупил, а офигел от сюрприза. А вот откуда вы сюда этот пост притащили - вот это интересно. 

А обратите внимание, автор того поста только вчера узнал, что так можно. Узнать-то узнал, но не осознал, поэтому позже в этой теме написал бессмысленный пример. И куда только зыксперт смотрел?

 
Не менее интересно посмотреть код по той ссылке на википедию, которую давал Игорь ru.wikipedia.org/wiki/Хранитель_(шаблон_проектирования). Первый пример для Java. Вот нафига там прокладка из класса Caretaker? Лишь бы поумничать? А по сути  все сводится к использованию дополнительной структуры и двух методов -  то, до чего додумается и любой идиот, который и слышать на слышал про Великие Святые Паттерны Проектирования, только сделает это без лишних прокладок и даже не осознавая своей принадлежности к "великим знаниям".
 
Давным давно, на собеседовании меня спросили - что такое объект. Я ответил - набор методов и был принят на работу сразу же. Потом мне рассказали, что другие кандидаты начинали рассказывать про кошечек, их лапки, собачек и прочее, что написано в детских книжках про программирование
 
Evgeniy Zhdan:
Давным давно, на собеседовании меня спросили - что такое объект. Я ответил - набор методов и был принят на работу сразу же. Потом мне рассказали, что другие кандидаты начинали рассказывать про кошечек, их лапки, собачек и прочее, что написано в детских книжках про программирование

а в чем поучительность Вашей истории? все так на работу и устраиваются -  нужно быть в нужном времени и в нужном месте, делов то... было вакантное место кнопкодава, вот и приняли )))

или у Вас на тот момент был какой-либо зарубежный сертификат?   ;)


ЗЫ: а зачем Вы работаете? расходы большие? - у Вас средний чек по ЕА 100-300 тыс руб, по моему должно хватать хоть на месяц ))))


UPD: появилось, чувство, что стал невольным участником шоу фриков, это не правильно!  (((

 

Поясняю.

В mql5, вложенный класс, как и в плюсах является friend по отношению к внешнему (кстати, именно этот момент я и не знал), а вот в mql4 это не реализовано и там, как-раз, и придется костыли писать. То есть, этот код корректно скомпилируется в mql5, но даст ошибку компиляции в mql4.

class Originator
  {
   int               state;
public:
   class Memento;
   Originator() : state(0){}
   Memento*          getMemento()      {return new Memento(&this);}
   void              setState(int s)   {state=s;}
   void              dumpState()       {printf("State: %i", state);}
///////////////////////////////////////////////////////////
   class Memento{
      int            state;
      Originator*    org;
      public:
                     Memento(Originator* mOrg):state(mOrg.state),org(mOrg){}
      void           restoreState() {org.state=state;}
   };
///////////////////////////////////////////////////////////
  };

Хотя,тут конечно мне сразу напишут, что это не С++, но, все же, проведу аналогию.

Про вложенные классы в официальных доках mql, что-то я ничего не припомню, как и об особенностях доступа из него к полям внешнего. Соответственно, все это, навевает мысли об UB. Да, работает, но закладываться на это, до появления соответствующей информации в доках, как бы на свой страх и риск.

Причина обращения: