Fragen zu OOP in MQL5 - Seite 57

 
Dmitry Fedoseev:

Wo ist der Zugang zu x von C2 aus?
Auch hier ist eine verschachtelte Klasse nur eine Frage der Sichtbarkeit der Klasse, um ein Objekt zu erstellen. Ein Objekt der Klasse C2 kann nur innerhalb der Klasse C1 erstellt werden. Das ist alles. Das ist der einzige Unterschied zum Schreiben einer Schrift:
Aber Sie nennen doch sicher etwas anderes eine verschachtelte Klasse? Sagen Sie uns was.

Es geht um Folgendes:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

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

Warum gibt es keine Fehlermeldung: kein Zugriff auf private Mitglieder?
ANTWORT:WeilMemento eine verschachtelte/interne Klasse relativ zuOriginatorist

 
Sergey Dzyublik:

Es geht um Folgendes:

Wo ist der Zugriff auf die Felder der anderen Klasse?

 
Dmitry Fedoseev:

Wo ist der Zugriff auf die Felder der anderen Klasse?

Machst du Witze? Der Autor des Beitrags hat es für die Begabten gelb markiert...

 
Sergey Dzyublik:

Willst du mich verarschen? Der Autor des Beitrags hat es speziell für die Begabten gelb hervorgehoben...

Verstehe. Nur glaube ich nicht, dass er gestern so war.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Aber dieser Kerl ist von deinem Verein... Es ist also in Ordnung, oder?

Ich werde sogar einen Screenshot zur Erinnerung machen:

123

 
Dmitry Fedoseev:

Verstehe. Nur glaube ich nicht, dass er gestern so war.https://www.mql5.com/ru/forum/85652/page48#comment_16405154 Aber dieser Kerl ist von deinem Verein... Es ist also in Ordnung, oder?

Ich werde sogar einen Screenshot zur Erinnerung machen:

Sind Sie geistig gesund?
Man wird auf einen bestimmten Beitrag mit einer Zuordnung verwiesen, man ist dumm, aber man kann das nicht einmal akzeptieren und verweist auf einen obskuren Beitrag aus einem völlig anderen Thread, nur um sich irgendwie zu rechtfertigen...
Viel Glück...

 
Sergey Dzyublik:

Sind Sie geistig gesund?
Sie werden auf einen bestimmten Beitrag mit einer Zuordnung verwiesen, Sie sind dumm, aber Sie können das nicht einmal akzeptieren und verweisen auf einen obskuren Beitrag aus einem völlig anderen Thema, nur um sich irgendwie zu rechtfertigen...
Viel Glück...

Ich beziehe mich auf den Beitrag aus demselben Thread, mit dem diese ganze Diskussion begonnen hat. Können Sie nicht sehen, aus welchem Thread dieser Beitrag stammt? Es stellt sich also die Frage, ob mit Ihrer Psyche etwas nicht stimmt.

Sie sind nicht sprachlos, sondern verblüfft über die Überraschung. Aber woher haben Sie diesen Beitrag hier - das ist interessant.

Und der Autor dieses Beitrags hat erst gestern herausgefunden, dass dies möglich ist. Er hat es herausgefunden, aber nicht realisiert, und deshalb hat er später in diesem Thread ein sinnloses Beispiel geschrieben. Wohin hat der Experte geschaut?

 
Es ist ebenso interessant, den Code aus dem Wikipedia-Link zu sehen, den Igor angegeben hat ru.wikipedia.org/wiki/keeper_(template_projecting). Das erste Beispiel ist für Java. Warum brauchen Sie dort eine Dichtung aus der Hausmeisterklasse? Nur um clever zu sein? Im Grunde läuft alles darauf hinaus, eine zusätzliche Struktur und zwei Methoden zu verwenden - etwas, das jeder Idiot, der noch nie etwas von den großen heiligen Entwurfsmustern gehört hat, tun wird, aber ohne unnötige Polsterung und ohne sich überhaupt bewusst zu sein, dass er zum "großen Wissen" gehört.
 
Vor langer Zeit wurde ich bei einem Vorstellungsgespräch gefragt, was ein Objekt sei. Ich antwortete - eine Reihe von Methoden und wurde sofort eingestellt. Dann wurde mir gesagt, dass andere Kandidaten anfingen, über Katzen, ihre Pfoten, Hunde und andere Dinge zu sprechen, die in Kinderprogrammierbüchern stehen
 
Evgeniy Zhdan:
Vor langer Zeit wurde ich bei einem Vorstellungsgespräch gefragt, was ein Objekt ist. Ich antwortete - eine Reihe von Methoden, und ich wurde sofort eingestellt. Dann wurde mir gesagt, dass andere Kandidaten anfingen, von Katzen, ihren Pfoten, Hunden und anderen Dingen zu erzählen, die in Kinderbüchern über das Programmieren geschrieben werden

Warum ist Ihre Geschichte lehrreich? Jeder bekommt auf diese Weise einen Job - man muss nur zur richtigen Zeit am richtigen Ort sein, das ist alles... es gab eine freie Stelle als Knopfmann, also haben sie dich eingestellt )))

oder hatten Sie zu diesem Zeitpunkt ein ausländisches Zertifikat?)


ZS: Warum arbeiten Sie? Sind die Kosten hoch? - Sie haben einen durchschnittlichen Scheck für die EA 100-300 Tausend Rubel, meiner Meinung nach sollte mindestens einen Monat ausreichen )))).


UPD: Ich hatte das Gefühl, dass ich ein unfreiwilliger Teilnehmer einer Freakshow war, das ist nicht richtig (((

 

Lassen Sie mich das erklären.

In mql5 ist die verschachtelte Klasse ebenso wie in pluses ein Freund der externen (das ist übrigens der Punkt, den ich nicht kannte), aber in mql4 ist das nicht implementiert, und man muss dort Krücken schreiben. Das heißt, dass dieser Code in mql5 korrekt kompiliert wird, aber in mql4 Kompilierungsfehler verursacht.

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

Obwohl sie mir natürlich schreiben werden, dass es sich nicht um C++ handelt, werde ich dennoch eine Analogie ziehen.

Ich erinnere mich nicht an irgendetwas über verschachtelte Klassen in den offiziellen mql-Dokumenten, ebenso wenig wie an die Besonderheiten des Zugriffs auf externe Felder daraus. Das alles lässt mich an UB denken. Ja, es funktioniert, aber wenn Sie die Grundlagen dafür schaffen, bis die entsprechenden Informationen in den Dokumenten erscheinen, tun Sie das auf eigenes Risiko.

Grund der Beschwerde: