Fragen zu OOP in MQL5 - Seite 5

 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes" verschoben.
 
Vladimir Simakov:
Komm schon! Ich benutze sie ständig.

Wo, an welchem Ort und wie?

Moderatoren, entschuldigen Sie, dass ich die Frage wiederhole. Ich möchte wirklich eine Antwort darauf bekommen.

 
Artyom Trishkin:

Warum sollten Sie einen an eine Funktion übergebenen Zeiger absichtlich neu zuweisen? Natürlich wird es eine undichte Stelle geben. Es handelt sich jedoch nicht um ein "klassisches Leck", sondern um einen klassischen Fehler bei der Handhabung eines Zeigers auf ein Objekt.

Sie müssen hier kein neues Objekt erstellen, sondern das externe Objekt behandeln, dessen Zeiger an die Funktion übergeben wurde.

Das bin nicht ich. Er stammt aus dem Code von jemand anderem in diesem Thread. Es wird als Beispiel genommen.
 
Dmitry Fedoseev:

Wo, an welchem Ort und wie?

Moderatoren, entschuldigen Sie, dass ich die Frage wiederhole. Ich möchte wirklich eine Antwort darauf bekommen.

Haben Sie Geduld. Ich komme nach Hause und werde es posten.
 
Dmitry Fedoseev:

Wo, an welchem Ort und wie?

Moderatoren, entschuldigen Sie, dass ich die Frage wiederhole. Ich möchte wirklich eine Antwort darauf bekommen.

Wenn ich die Frage richtig verstehe, deklarieren wir die Klasse als Objekt mit new.
Verwenden Sie dann einen Punkt, um öffentliche Methoden der Klasse über das erstellte Objekt aufzurufen.
Nachdem alle aufgerufenen Methoden ausgeführt wurden, löschen wir den Speicher, indem wir das erstellte Objekt delete löschen.

 
Roman:

Wenn ich die Frage richtig verstanden habe, deklarieren wir die Klasse als ein Objekt mit new.
Dann rufen wir die öffentlichen Methoden der Klasse über das erstellte Objekt auf, indem wir einen Punkt verwenden.
Nachdem alle aufgerufenen Methoden ausgeführt wurden, löschen wir den Speicher, indem wir das erstellte Objekt delete löschen.

Nö. Zuerst dachte ich, es handele sich um einen Funktionsparameter wie diesen - ein Objekt, aber nicht als Referenz, aber am Ende steht ein Semikolon. Wenn es sich um eine normale Objekterstellung bei der Deklaration handelt, warum steht es dann in Klammern? Es bleibt also vorerst das Rätsel des Jahrhunderts.

 
Dmitry Fedoseev:

Nö. Zuerst dachte ich, es handele sich um einen Funktionsparameter wie diesen - ein Objekt, aber nicht als Referenz, aber am Ende steht ein Semikolon. Wenn es sich um eine normale Objekterstellung bei der Deklaration handelt, warum steht es dann in Klammern? Es bleibt also vorerst das Rätsel des Jahrhunderts.

In Klammern - weil es ein Hinweis auf den Text ist))))
 
Artyom Trishkin:

Und warum haben Sie absichtlich einen an eine Funktion übergebenen Zeiger neu zugewiesen? Natürlich wird es eine undichte Stelle geben. Es handelt sich aber nicht um ein "klassisches Leck", sondern um einen klassischen Fehler bei der Handhabung eines Zeigers auf ein Objekt.

Sie brauchen hier kein neues Objekt zu erstellen, sondern behandeln das externe Objekt, dessen Zeiger an die Funktion übergeben wurde.

Es geht nicht um mein Beispiel, sondern um die Implementierung der Zeiger selbst in MQL - wenn man sie nicht dereferenzieren muss (und der Zeiger einer Instanz des Objekts zugewiesen werden kann!), wenn man statt eines Zeigers eine Referenz auf das Objekt übergeben kannhttps://www.mql5.com/ru/forum/1111/page2471#comment_11796665

hier gibt es keine detaillierten Informationen darüber, wo und wann (CObj& obj) aufgetaucht ist (& ist keine Zeiger-Dereferenzierungsoperation, sondern die Übernahme eines Zeigers GetPointer() )

Ok, ich will keine Informationen verschwenden... Ich habe mir bereits gesagt, und ich werde es noch einmal in diesem Forum wiederholen - MQL ist nicht C++, das ist, wie es implementiert ist - gut, ich habe keine anderen Optionen

 
Igor Makanu:

Es geht nicht um mein Beispiel, sondern um die Implementierung der Zeiger selbst in MQL - wenn man sie nicht dereferenzieren muss (und der Zeiger einer Instanz des Objekts zugewiesen werden kann!), wenn man statt eines Zeigers eine Referenz auf das Objekt übergeben kann https://www.mql5.com/ru/forum/1111/page2471#comment_11796665

hier gibt es keine detaillierten Informationen darüber, wo und wann (CObj& obj) aufgetaucht ist (& ist keine Zeiger-Dereferenzierungsoperation, sondern die Übernahme eines Zeigers GetPointer() )

Ok, ich will keine Informationen verschwenden... Ich habe mir bereits gesagt, und ich werde es noch einmal in diesem Forum wiederholen - MQL ist nicht C++, das ist, wie es implementiert ist - gut, ich habe keine anderen Optionen

Sie sind dramatisch, es gibt keine Komplexitäten und Verwirrungen.

 
Vladimir Simakov:
Die Klammern bedeuten, dass es sich um einen Hinweis auf den Text handelt: ))))

So, das war's.

Zum Beispiel so:

void z(CObj * o){
}

Nicht einmal nur können, sondern besser, weil man es so nennen kann:

CObj obj;
z(GetPointer(obj));

Wenn Sie einen Zeiger per Referenz übergeben, benötigen Sie eine weitere Variable für den Zeiger.

***

Und wenn ein Zeiger an eine Funktion übergeben werden muss, um ein Objekt in der Funktion zu erstellen, funktioniert das folgendermaßen:

class CObj{
   public:
   int f(){
      return(33);
   }
};

CObj * obj;

void OnStart(){
  z(obj);
  delete(obj);
}

void z(CObj & o){
   o = new CObj();
}
Das ist im Grunde alles, was Sie über OOP wissen wollten, aber nicht zu fragen wagten)))