Perguntas sobre OOP em MQL5 - página 57

 
Dmitry Fedoseev:

Onde está o acesso ao x a partir do C2?
Mais uma vez, uma classe aninhada é apenas uma questão de visibilidade de classe para criar um objeto. Um objeto da classe C2 só pode ser criado dentro da classe C1. Isso é tudo. Essa é a única diferença de escrever um tipo:
Mas certamente você chama outra coisa de uma classe aninhada? Diga-nos o que.

Trata-se do seguinte:

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Bichos, insetos, perguntas

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;}
   };
///////////////////////////////////////////////////////////
  };

Por que não há erro: não pode ter acesso ao membro privado?
RESPOSTA:PorqueMementoé uma classe aninhada/internacional em relação aoOriginador

 
Sergey Dzyublik:

Estamos falando sobre o seguinte:

Onde está o acesso aos campos da outra classe?

 
Dmitry Fedoseev:

Onde está o acesso aos campos da outra classe?

Você está brincando, o autor do post destacou-o em amarelo para os dotados.

 
Sergey Dzyublik:

Está brincando comigo, o autor do post o destacou especificamente em amarelo para os dotados...

Entendo. Só não acho que ele tenha sido assim ontem.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Mas este sujeito é do seu clube... então está tudo bem, certo?

Vou até tirar uma foto de tela como lembrança:

123

 
Dmitry Fedoseev:

Entendo. Só não acho que ele tenha sido assim ontem.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Mas este sujeito é do seu clube... então está tudo bem, certo?

Vou até tirar uma foto de tela como lembrança:

Você está mentalmente bem?
Você é direcionado a um posto específico com uma alocação, você é burro, mas não pode nem aceitar isso e se referir a um posto obscuro de um fio completamente diferente, apenas para de alguma forma se justificar...
Boa sorte...

 
Sergey Dzyublik:

Você está mentalmente bem?
Você está sendo dirigido a um posto específico com uma alocação, você é burro, mas não pode sequer aceitá-lo e se referir a um posto obscuro de um tópico completamente diferente, apenas para de alguma forma se justificar...
Boa sorte...

Estou me referindo ao correio do mesmo fio condutor, o correio que iniciou toda esta discussão. Você não consegue ver de que fio é este post? Então a pergunta que surge, talvez você tenha algo de errado com sua psique?

E não estupefato, mas desconcertado com a surpresa. Mas onde você conseguiu este posto aqui - isso é interessante.

E lembre-se, o autor daquele post só ontem descobriu que é possível. Ele o descobriu, mas não se deu conta e é por isso que escreveu um exemplo sem sentido neste tópico mais tarde. Onde o especialista estava procurando?

 
É igualmente interessante ver o código daquele link wikipedia que Igor deu ao ru.wikipedia.org/wiki/keeper_(template_projecting). O primeiro exemplo é para Java. Por que você precisa de uma gaxeta da classe Caretaker de lá? Só para ser esperto? Em essência, tudo se resume ao uso de uma estrutura adicional e dois métodos - algo que qualquer idiota, que nunca ouviu falar dos Grandes Padrões de Desenho Sagrado, fará, mas sem estofamento desnecessário e sem mesmo perceber sua pertença ao "grande conhecimento".
 
Há muito tempo, me perguntaram, em uma entrevista de trabalho, o que era um objeto. Eu respondi - um conjunto de métodos e fui contratado imediatamente. Depois me disseram que outros candidatos começaram a falar sobre gatos, suas patas, cães e outras coisas que estão escritas nos livros de programação infantil.
 
Evgeniy Zhdan:
Há muito tempo, me perguntaram, em uma entrevista, o que é um objeto. Eu respondi - um conjunto de métodos e fui contratado imediatamente. Depois me disseram que outros candidatos começaram a contar sobre gatos, suas patas, cães e outras coisas que estão escritas em livros infantis sobre programação.

Por que sua história é instrutiva? Todos conseguem um emprego desta maneira - você tem que estar no lugar certo na hora certa, é só isso... havia uma vaga como homem de botão, então eles o contrataram ))))

ou você tinha algum certificado estrangeiro naquela época?)


ZS: Por que você trabalha? os custos são grandes? - Você tem um cheque médio para os 100-300 mil rublos EA, na minha opinião deve ser suficiente pelo menos um mês )))).


UPD: tive a sensação de que era um participante pouco disposto em um show de aberrações, não está certo (((

 

Deixe-me explicar.

Em mql5, a classe aninhada, bem como em pluses, é amiga da externa (a propósito, este é o ponto que eu não sabia). Mas em mql4 não é implementado, e você tem que escrever muletas lá. Ou seja, este código será compilado corretamente em mql5, mas causará erros de compilação em 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;}
   };
///////////////////////////////////////////////////////////
  };

Embora, é claro, eles me escreverão que não é C++, mas ainda assim eu farei uma analogia.

Não me lembro de nada sobre as aulas aninhadas nos documentos oficiais do mql, bem como as peculiaridades de acesso a campos externos a partir dele. Consequentemente, tudo isso me faz pensar na UB. Sim, funciona, mas estabelecer as bases para isso, até que as informações relevantes apareçam nos documentos, é meio que por sua própria conta e risco.