Questions sur la POO dans MQL5 - page 57

 
Dmitry Fedoseev:

Où se trouve l'accès à x à partir de C2 ?
Encore une fois, une classe imbriquée n'est qu'une question de visibilité de la classe pour créer un objet. Un objet de la classe C2 ne peut être créé qu'à l'intérieur de la classe C1. C'est tout. C'est la seule différence avec l'écriture d'un type :
Mais vous appelez sûrement quelque chose d'autre une classe imbriquée ? Dites-nous quoi.

Il s'agit de ce qui suit :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

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

Pourquoi il n'y a pas d'erreur : impossible d'accéder à un membre privé ?
REPONSE :parce queMementoest une classe imbriquée/interne par rapport àOriginator.

 
Sergey Dzyublik:

Nous parlons de ce qui suit :

Où se trouve l'accès aux champs de l'autre classe ?

 
Dmitry Fedoseev:

Où se trouve l'accès aux champs de l'autre classe ?

Vous plaisantez, l'auteur du post l'a surligné en jaune pour les surdoués....

 
Sergey Dzyublik:

Tu te moques de moi, l'auteur du post l'a spécifiquement surligné en jaune pour les surdoués....

Je vois. Seulement je ne pense pas qu'il était hier.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Mais ce camarade est de votre club... alors c'est bon, non ?

Je vais même faire une capture d'écran en guise de souvenir :

123

 
Dmitry Fedoseev:

Je vois. Seulement il n'en avait pas l'air hier.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Mais ce copain est de votre club... alors c'est bon, non ?

Je vais même faire une capture d'écran en guise de souvenir :

Êtes-vous bien mentalement ?
Vous êtes dirigé vers un message spécifique avec une allocation, vous êtes stupide, mais vous ne pouvez même pas accepter cela et vous vous référez à un message obscur d'un fil de discussion complètement différent, juste pour vous justifier d'une certaine manière...
Bonne chance...

 
Sergey Dzyublik:

Êtes-vous bien mentalement ?
Vous êtes dirigé vers un post spécifique avec une allocation, vous êtes stupide, mais vous ne pouvez même pas l'accepter et vous vous référez à un post obscur d'un sujet complètement différent, juste pour vous justifier en quelque sorte...
Bonne chance...

Je fais référence au message du même fil, celui qui a lancé toute cette discussion. Vous ne voyez pas de quel fil de discussion provient ce message ? Alors la question se pose, peut-être avez-vous quelque chose qui ne va pas dans votre psyché ?

Et non pas abrutis, mais déconcertés par la surprise. Mais où avez-vous trouvé ce post ici - c'est intéressant.

Et sachez que l'auteur de cet article n'a découvert qu'hier que c'était possible. Il l'a découvert mais ne l'a pas réalisé et c'est pourquoi il a écrit un exemple sans signification dans ce fil plus tard. Où l'expert regardait-il ?

 
Il est également intéressant de voir le code du lien wikipedia qu'Igor a donné ru.wikipedia.org/wiki/keeper_(template_projecting). Le premier exemple est pour Java. Pourquoi avez-vous besoin d'un joint de la classe des concierges là-bas ? Juste pour faire le malin ? En substance, tout se résume à l'utilisation d'une structure supplémentaire et de deux méthodes - ce que n'importe quel idiot, qui n'a même jamais entendu parler des grands modèles de conception sacrés, fera, mais sans rembourrage inutile et sans même se rendre compte de son appartenance au "grand savoir".
 
Il y a longtemps, lors d'un entretien d'embauche, on m'a demandé ce qu'était un objet. J'ai répondu - un ensemble de méthodes et j'ai été embauché sur le champ. Puis on m'a dit que d'autres candidats ont commencé à parler de chats, de leurs pattes, de chiens et d'autres choses qui sont écrites dans les livres de programmation pour enfants
 
Evgeniy Zhdan:
Il y a longtemps, lors d'un entretien, on m'a demandé ce qu'était un objet. J'ai répondu - un ensemble de méthodes et j'ai été embauché sur le champ. Puis on m'a dit que d'autres candidats ont commencé à parler de chats, de leurs pattes, de chiens et d'autres choses qui sont écrites dans les livres pour enfants sur la programmation

Pourquoi votre histoire est-elle instructive ? Tout le monde trouve un emploi de cette façon - il faut être au bon endroit au bon moment, c'est tout... il y avait un poste vacant de préposé aux boutons, alors ils t'ont embauché ))))

ou avez-vous eu un certificat étranger à l'époque ?)


ZS : Pourquoi travaillez-vous ? Les coûts sont-ils importants ? - Vous avez un chèque moyen pour l'EA de 100-300 mille roubles, à mon avis devrait suffire au moins un mois )))).


UPD : J'ai eu l'impression d'être un participant involontaire à une foire aux monstres, ce n'est pas bien ((()

 

Laissez-moi vous expliquer.

Dans mql5, la classe imbriquée ainsi que dans les plus est une amie de la classe externe (d'ailleurs, c'est le point que je ne connaissais pas). Mais dans mql4, ce n'est pas implémenté, et vous devez écrire des béquilles là. C'est-à-dire que ce code compilera correctement dans mql5, mais provoquera des erreurs de compilation dans 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;}
   };
///////////////////////////////////////////////////////////
  };

Bien sûr, ils m'écriront que ce n'est pas C++, mais je vais quand même faire une analogie.

Je ne me rappelle pas avoir entendu parler de classes imbriquées dans la documentation officielle de mql, ni des particularités de l'accès aux champs externes à partir de ces classes. Par conséquent, tout ceci me fait penser à l'UB. Oui, cela fonctionne, mais c'est à vos risques et périls que vous préparez le terrain en attendant que les informations pertinentes apparaissent dans la documentation.