Preguntas sobre POO en MQL5 - página 57

 
Dmitry Fedoseev:

¿Dónde está el acceso a x desde C2?
De nuevo, una clase anidada es sólo una cuestión de visibilidad de la clase para crear un objeto. Un objeto de la clase C2 sólo puede ser creado dentro de la clase C1. Eso es todo. Esa es la única diferencia con respecto a escribir un tipo:
Pero, ¿seguro que llamas a otra cosa clase anidada? Díganos qué.

Se trata de lo siguiente:

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

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 qué no hay error: no se puede acceder al miembro privado?
RESPUESTA:PorqueMementoes una clase anidada/interna relativa aOriginator

 
Sergey Dzyublik:

Se trata de lo siguiente:

¿Dónde está el acceso a los campos de la otra clase?

 
Dmitry Fedoseev:

¿Dónde está el acceso a los campos de la otra clase?

¿Estás de broma? El autor del post lo ha resaltado en amarillo para los superdotados...

 
Sergey Dzyublik:

Me estás tomando el pelo, el autor del post lo resaltó específicamente en amarillo para los superdotados...

Ya veo. Sólo que no creo que fuera así ayer.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Pero este tipo es de su club... así que está bien, ¿no?

Incluso haré una captura de pantalla como recuerdo:

123

 
Dmitry Fedoseev:

Ya veo. Sólo que no creo que fuera así ayer.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Pero este tipo es de su club... así que está bien, ¿no?

Incluso haré una captura de pantalla como recuerdo:

¿Estás bien mentalmente?
Te dirigen a un post específico con una asignación, eres tonto, pero ni siquiera puedes aceptar eso y te refieres a un post oscuro de un hilo completamente diferente, sólo para justificarte de alguna manera...
Buena suerte...

 
Sergey Dzyublik:

¿Estás bien mentalmente?
Se te está dirigiendo a un post específico con una asignación, eres tonto, pero ni siquiera puedes aceptarlo y te refieres a un oscuro post de un tema completamente diferente, sólo para justificarte de alguna manera...
Buena suerte...

Me refiero al post del mismo hilo, el que inició toda esta discusión. ¿No puedes ver de qué hilo es este post? Entonces surge la pregunta, ¿tal vez tienes algo mal en tu psique?

Y no se ha quedado mudo, sino desconcertado por la sorpresa. Pero de dónde has sacado este post aquí - es interesante.

Y ojo, el autor de ese post se enteró ayer de que es posible. Lo descubrió pero no se dio cuenta y por eso escribió después en este hilo un ejemplo sin sentido. ¿Dónde estaba mirando el experto?

 
Es igualmente interesante ver el código de ese enlace de wikipedia que Igor dio ru.wikipedia.org/wiki/keeper_(template_projecting). El primer ejemplo es para Java. ¿Por qué necesitas una junta de la clase de Cuidador allí? ¿Sólo para ser inteligente? En esencia, todo se reduce a utilizar una estructura adicional y dos métodos - algo que cualquier idiota, que ni siquiera ha oído hablar de los Grandes Patrones de Diseño Sagrado, hará, pero sin relleno innecesario y sin siquiera darse cuenta de su pertenencia al "gran conocimiento".
 
Hace mucho tiempo, en una entrevista de trabajo me preguntaron qué era un objeto. Respondí: un conjunto de métodos y me contrataron enseguida. Luego me dijeron que otros candidatos empezaron a hablar de gatos, de sus patas, de perros y de otras cosas que se escriben en los libros de programación para niños
 
Evgeniy Zhdan:
Hace mucho tiempo, me preguntaron en una entrevista qué es un objeto. Respondí: un conjunto de métodos y me contrataron enseguida. Luego me dijeron que otros candidatos empezaron a hablar de gatos, de sus patas, de perros y de otras cosas que se escriben en los libros infantiles sobre programación

¿Por qué es instructiva su historia? Todo el mundo consigue un trabajo de esta manera: hay que estar en el lugar adecuado en el momento adecuado, eso es todo... había una vacante como botonero, así que te contrataron )))

o tenía algún certificado extranjero en ese momento).


ZS: ¿Por qué trabaja? ¿Son grandes los costes? - Usted tiene un cheque promedio para el EA 100-300 mil rublos, en mi opinión debería ser suficiente al menos un mes )))).


UPD: Tuve la sensación de ser un participante involuntario en un espectáculo de fenómenos, esto no está bien (((

 

Déjeme explicarle.

En mql5, la clase anidada al igual que en pluses es amiga de la externa (por cierto, este es el punto que desconocía). Pero en mql4 no está implementado, y hay que escribir muletillas ahí. Es decir, este código compilará correctamente en mql5, pero causará errores de compilación en 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;}
   };
///////////////////////////////////////////////////////////
  };

Aunque, por supuesto, me escribirán que no es C++, pero aun así haré una analogía.

No recuerdo nada sobre las clases anidadas en los docs oficiales de mql, así como las peculiaridades del acceso a campos externos desde el mismo. En consecuencia, todo esto me hace pensar en la UB. Sí, funciona, pero el hecho de preparar el terreno para ello, hasta que la información pertinente aparezca en los documentos, es un poco por tu cuenta y riesgo.