Fragen zu OOP in MQL5 - Seite 86

 
Igor Makanu:

das macht Sinn

aber ich vermute, dass der Sinn darin besteht, sie mit statischen Methoden zu verwenden

Ich muss es testen, aber ich weiß nicht wie, also habe ich gefragt


UPD: googelte dieses Thema gestern, viele Erwähnungen von privaten destructor, müssen auch zu denken, was es tun kann

Statische Methoden haben keinen this-Zeiger und können mit diesem Zeiger nichts anfangen.

Der private Destruktor garantiert, dass das Objekt vom Objekt selbst gelöscht wird. Aber wie ich oben schon sagte, ist es meiner Meinung nach keine gute Praxis, die man vermeiden sollte (obwohl es manchmal ganz praktisch ist und in SEHR vielen Fällen akzeptabel ist, es zu verwenden).

 
Georgiy Merts:

Statische Methoden haben keinen this-Zeiger und können mit diesem Zeiger nichts anfangen.

Ich kann Ihre Nachricht missverstanden haben, aber ich bin mir bewusst, dass die Methode nicht über einen Zeiger auf diese, nur die Objektinstanz selbst tut, schrieb ich es, weil von der statischen Methode Klasse Felder verfügbar sind und höchstwahrscheinlich kann mit der Löschung manipuliert werden

das Ziel ist es, dieses Design zu betrachten, ich habe es nie versucht, und es ist nicht eine gemeinsame Art und Weise


Sergey Dzyublik:

1) Von statischen Methoden aus ist der Zugriff auf diese untersagt.
Wo ist "delete &this;"? - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) Der private Destruktor verbietet es, ein Objekt auf dem Stack zu erzeugen, aber man kann es immer noch mit dem new-Operator erzeugen, diesmal auf dem Heap:

Hier ist eine weitere Verwendung von delete &this.

Danke, ich werde es mir ansehen, es ist nützlich.




beschäftigt, alles in Ordnung, ich werde später mehr fragen... Was passiert, wenn eine Basisklasse eine Methode mit

delete &this;

und von einer abgeleiteten Klasse eine Methode mit der entfernten Basisklasse aufrufen.... keinen praktischen Zweck, aber ich will es erst einmal herausfinden

 
Igor Makanu:

Ich kann Ihre Nachricht missverstanden haben, aber ich bin mir bewusst, dass die Methode nicht über einen this-Zeiger, nur die Instanz des Objekts selbst tut, schrieb ich es, weil die Klasse Felder von der statischen Methode verfügbar sind, und höchstwahrscheinlich können Sie mit Löschung manipulieren

Bisher habe ich dieses Design noch nie ausprobiert, und es ist auch nicht üblich.


Danke, ich werde es mir ansehen, es ist hilfreich.




Viel zu tun, alles in Reparatur, ich frage später weiter... Was passiert, wenn eine Basisklasse eine Methode mit

und von einer abgeleiteten Klasse eine Methode mit der entfernten Basisklasse aufrufen.... keinen praktischen Zweck, aber ich will es erst einmal herausfinden

Machen Sie sich keine Mühe, Sie werden es nie brauchen.

Man muss die Grundlagen der Sprache verstehen, bevor man sich mit solchen Dingen beschäftigt.

 
Koldun Zloy:

Machen Sie sich keine Mühe, Sie werden es nie brauchen.

Diese Aussage ist nicht korrekt, denn wenn man seinen Horizont nicht erweitert, braucht man das natürlich auch nicht.

Koldun Zloy:

Sie müssen die Grundlagen der Sprache verstehen, bevor Sie solche Dinge in Angriff nehmen.

Ich tue es so oft ich kann, aber im Allgemeinen löse ich 90%+% der MQL-Probleme on the fly, die Probleme sind normalerweise typisch und die meisten wurden bereits gelöst und sind frei zugänglich.



concerning delete &this; ... ... Ich habe einen Sammelauftrag verwendet, der seine Öffnung überwacht hat und bei Requotes den Auftrag wieder öffnen konnte ... ... und viele andere Dinge,

Ich habe dieses Objekt (Auftragsklasse) aus einer anderen Klasse erstellt und gelöscht, vielleicht ist es bequemer,delete &this; zu verwenden.

 

Ich frage mich, ob dies eine Störung oder ein Feature ist)

Es gibt eine Struktur innerhalb der Klasseninstanz.

Ich habe einen Punkt gesetzt, um den Inhalt der Struktur zu sehen.
Sie wird aber nur angezeigt, wenn ich eckige Klammern setze.
Obwohl sich die Struktur in einer einzigen Instanz befindet.

ist das Problem gelöst, wenn es sich bei der Klasse nicht um ein Array-Element handelt.




und den Code selbst zum "Herumstöbern"

class ABC
{   
   public:         
           struct ST
           {    
              int r;
              int U;
                  ST() {r=0; U=0;}           
           };
           ST st;
};
ABC abc[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {

abc[0].st.r;

   return(INIT_SUCCEEDED);
  }
 
Pavel Verveyko:

Ich frage mich, ob dies ein Fehler oder ein Feature ist)

Es gibt eine Struktur innerhalb der Klasseninstanz.

Ich habe einen Punkt gesetzt, um den Inhalt der Struktur zu sehen.
Sie wird aber nur angezeigt, wenn ich eckige Klammern setze.
Obwohl sich die Struktur in einer einzigen Instanz befindet.

ist das Problem gelöst, wenn es sich bei der Klasse nicht um ein Array-Element handelt.




und den Code selbst zum "Herumstöbern"

das könnte richtig sein :-)

 
Maxim Kuznetsov:

das ist wahrscheinlich richtig :-)

vielleicht), aber das ändert nichts an der Aussage über den Tooltip)

 
Pavel Verveyko:

Ich frage mich, ob dies eine Störung oder ein Feature ist)

Es gibt eine Struktur innerhalb der Klasseninstanz.

Ich habe einen Punkt gesetzt, um den Inhalt der Struktur zu sehen.
Sie wird aber nur angezeigt, wenn ich eckige Klammern setze.
Obwohl sich die Struktur in einer einzigen Instanz befindet.

ist das Problem gelöst, wenn es sich bei der Klasse nicht um ein Array-Element handelt.




und der Code selbst zum "Stöbern"

Ein weiterer Fehler des Herausgebers(
 

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html

Везде, где это возможно, заменяйте глобальные переменные локальными.

Für den Zugriff auf globale Variablen sind mehr Befehle erforderlich als für den Zugriff auf lokale Variablen. Außerdem geht der Compiler, sofern nicht ausdrücklich anders angegeben, davon aus, dass das aufgerufene Unterprogramm die Werte aller globalen Variablen ändern kann. So werden nach dem Aufruf des Unterprogramms die Werte aller globalen Variablen wiederholt in den Speicher geladen, was zu Leistungseinbußen führt.


Wenn Sie auf eine globale Variable zugreifen müssen (die nicht von diesem Thread und anderen geteilt wird), kopieren Sie ihren Wert in eine lokale Variable und arbeiten Sie mit dieser Kopie.

Die Verwendung einer lokalen Kopie bringt einen Leistungsgewinn, es sei denn, es wird nur einmal auf die globale Variable zugegriffen.


Wenn in meinem Beispiel:

class CEA
{
private:
   double            _Ask, _Bid;
public:
   void              onTick(const MqlTick &tick);
};
//+------------------------------------------------------------------+
void CEA::onTick(const MqlTick &tick)
{
   _Ask = tick.ask;
   _Bid = tick.bid;
}

in der Methode onTick() die Werte von Ask und Bid kopieren und _Ask, _Bid (virtueller Handel) in den übrigen Methoden verwenden

wie die Arbeit mit globalen Variablen sein?

ZS: als eine Option, natürlich kann ich durch Referenz &tick in allen Methoden übergeben, aber wieder Fragen, was effektiver ist

 
Igor Makanu:

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


wenn in meinem Beispiel:

Kopieren Sie die asc- und bid-Werte in die onTick()-Methode und verwenden Sie _Ask, _Bid (virtueller Handel) in den übrigen Methoden

wie die Arbeit mit globalen Variablen sein?

ZS: als eine Option, kann ich natürlich durch Referenz &tick an alle Methoden übergeben, aber wieder Fragen, was effektiver ist

Igor Makanu:

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


Wenn in meinem Beispiel:

in der Methode onTick() die Werte von Ask und Bid kopieren und _Ask, _Bid (virtueller Handel) in anderen Methoden verwenden

wie die Arbeit mit globalen Variablen sein?

ZS: als eine Option, natürlich kann ich durch Referenz &tick in allen Methoden übergeben, aber wieder Fragen, was effektiver ist

Frage. Was hat es mit der Ziege auf sich? Wenn in einer Methode, einer Klasse, in einem kugelförmigen Pferd, ja in einem physikalischen Vakuum (also ich bin drunk)))), dann ja, es macht Sinn. Und wenn in einem realen Projekt, entweder eine Klasse auf globaler Ebene, oder eine einzelne, die alle diese trichomudin (sorry für die zusätzliche bourbon))))) am Anfang des Handlers, und, Anfrage direkt von ihm an jedem Ort))) behandelt
Grund der Beschwerde: