Domande su OOP in MQL5 - pagina 57

 
Dmitry Fedoseev:

Dov'è l'accesso a x da C2?
Di nuovo, una classe annidata è solo una questione di visibilità della classe per creare un oggetto. Un oggetto della classe C2 può essere creato solo all'interno della classe C1. Questo è tutto. Questa è l'unica differenza dallo scrivere un tipo:
Ma sicuramente chiamerai qualcos'altro una classe annidata? Dicci cosa.

Si tratta di quanto segue:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

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

Perché non c'è nessun errore: impossibile accedere al membro privato?
RISPOSTA:PerchéMementoè una classe annidata/interna rispetto aOriginator

 
Sergey Dzyublik:

Stiamo parlando di quanto segue:

Dov'è l'accesso ai campi dell'altra classe?

 
Dmitry Fedoseev:

Dov'è l'accesso ai campi dell'altra classe?

Stai scherzando, l'autore del post l'ha evidenziato in giallo per i dotati...

 
Sergey Dzyublik:

Stai scherzando, l'autore del post lo ha specificamente evidenziato in giallo per i dotati...

Capisco. Solo che non credo che fosse ieri.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Ma questo compagno è del tuo club... quindi va bene, giusto?

Farò anche uno screenshot come ricordo:

123

 
Dmitry Fedoseev:

Capisco, solo che ieri non sembrava così.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Ma questo amico è del tuo club... quindi va bene, giusto?

Farò anche uno screenshot come ricordo:

Sei mentalmente a posto?
Se vieni indirizzato a un post specifico con un'assegnazione, sei scemo, ma non riesci nemmeno ad accettarlo e fai riferimento a un post oscuro di un thread completamente diverso, solo per giustificarti in qualche modo...
Buona fortuna...

 
Sergey Dzyublik:

Sei mentalmente a posto?
Sei stato indirizzato a un post specifico con un'assegnazione, sei muto, ma non riesci nemmeno ad accettarlo e fai riferimento a un post oscuro di un argomento completamente diverso, solo per giustificarti in qualche modo...
Buona fortuna...

Mi riferisco al post dello stesso thread, il post che ha iniziato tutta questa discussione. Non riesci a vedere da quale thread proviene questo post? Quindi la domanda sorge spontanea: forse hai qualcosa che non va nella tua psiche?

E non intontiti, ma sconcertati dalla sorpresa. Ma dove hai trovato questo post qui - è interessante.

E badate, l'autore di quel post ha scoperto solo ieri che è possibile. L'ha scoperto ma non se n'è reso conto ed è per questo che più tardi ha scritto un esempio senza senso in questo thread. Dove stava guardando l'esperto?

 
È altrettanto interessante vedere il codice da quel link di wikipedia che Igor ha dato ru.wikipedia.org/wiki/keeper_(template_projecting). Il primo esempio è per Java. Perché hai bisogno di una guarnizione della classe Caretaker lì? Solo per fare il furbo? In sostanza, tutto si riduce all'uso di una struttura aggiuntiva e di due metodi - qualcosa che qualsiasi idiota, che non ha mai nemmeno sentito parlare dei Great Sacred Design Patterns, farà, ma senza guarnizioni inutili e senza nemmeno rendersi conto della sua appartenenza alla "grande conoscenza".
 
Molto tempo fa, ad un colloquio di lavoro mi è stato chiesto cosa fosse un oggetto. Ho risposto - una serie di metodi e sono stato assunto subito. Poi mi è stato detto che altri candidati hanno iniziato a parlare di gatti, delle loro zampe, dei cani e di altre cose che sono scritte nei libri di programmazione per bambini
 
Evgeniy Zhdan:
Molto tempo fa, in un'intervista mi è stato chiesto cos'è un oggetto. Ho risposto - una serie di metodi e sono stato assunto subito. Poi mi è stato detto che altri candidati hanno iniziato a raccontare di gatti, delle loro zampe, di cani e di altre cose che sono scritte nei libri per bambini sulla programmazione

Perché la tua storia è istruttiva? Tutti ottengono un lavoro in questo modo - devi essere nel posto giusto al momento giusto, questo è tutto... c'era un posto vacante come addetto ai bottoni, così ti hanno assunto )))

o aveva qualche certificato straniero in quel momento?)


ZS: Perché lavori? I costi sono grandi? - Hai un assegno medio per l'EA 100-300 mila rubli, secondo me dovrebbe bastare almeno un mese )))).


UPD: Ho avuto la sensazione di essere un partecipante involontario in un freak show, questo non è giusto (((

 

Lasciatemi spiegare.

In mql5, la classe annidata così come in plus è amica di quella esterna (a proposito, questo è il punto che non sapevo). Ma in mql4 non è implementato, e bisogna scrivere stampelle lì. Cioè, questo codice compilerà correttamente in mql5, ma causerà errori di compilazione in 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;}
   };
///////////////////////////////////////////////////////////
  };

Anche se, naturalmente, mi scriveranno che non si tratta di C++, ma comunque farò un'analogia.

Non ricordo nulla sulle classi annidate nei documenti ufficiali di mql, così come le peculiarità dell'accesso ai campi esterni da esso. Di conseguenza, tutto questo mi fa pensare a UB. Sì, funziona, ma porre le basi per questo, fino a quando le informazioni rilevanti non appaiono nei documenti, è un po' a vostro rischio e pericolo.