![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Wie gebe ich eine Referenz in Funktionsparametern zurück?
Diese Art von Code verursacht Probleme:
CMy* obj; // global bool func(CMy* obj) { ... obj = new CMy(); ... }
Ungültiger Zeigerzugriff beim Versuch, mit obj zu arbeiten.
Ich habe versucht, ein & hinzuzufügen.
Es funktioniert. In der Dokumentation habe ich die Referenzrückgabe in Funktionsparametern nicht gefunden.
In Analogie dazu habe ich dieses Thema in C++ gefunden: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter
Aber ** funktioniert hier nicht. *& stattdessen?
5.00.630 x64
Ich konnte in der Dokumentation keine Referenzrückgabe in den Funktionsparametern finden.
Wie gebe ich eine Referenz in Funktionsparametern zurück?
Diese Art von Code verursacht Probleme:
Ungültiger Zeigerzugriff beim Versuch, mit obj zu arbeiten.
Ich habe versucht, ein & hinzuzufügen.
Es funktioniert. In der Dokumentation habe ich die Referenzrückgabe in Funktionsparametern nicht gefunden.
In Analogie dazu habe ich dieses Thema in C++ gefunden: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter
Aber Ihr ** funktioniert nicht. *& stattdessen?
5.00.630 x64
IMHO (es ist lange her).
Sie können einen Zeiger nicht über Argumente übergeben, sondern einen Verweis erzeugen. Sie können eine neue Instanz einer Klasse nicht an eine Referenz binden. Es bleibt also folgender Weg:
Ich bin ein Befürworter von OOP, weil ich die Vorteile der Programmierung von unten nach oben verstanden habe. Von Objektinteraktionsschnittstellen zur Klassenimplementierung.
IMHO (es ist schon eine Weile her).
Sie können keinen Zeiger über Argumente übergeben, Sie können einen Verweis erstellen. Sie können eine neue Instanz der Klasse nicht an eine Referenz binden. Damit bleibt uns diese Möglichkeit:
Ich habe die Frage falsch definiert.
Übergabe eines Zeigers per Referenz. Ich frage mich, ob man die *&-Variante verwenden darf und ob sie nicht in weiteren Versionen abgedeckt wird? In C++ scheint ein solches Konstrukt legal zu sein.
Sie beziehen sich darauf: MQL5 Referenzhandbuch / Grundlagen der Sprache / Datentypen / Referenzen. Modifikator & und Schlüsselwort this?
Ich wünschte, es gäbe die richtigen Informationen...
In dem Artikel
https://www.mql5.com/ru/docs/basis/function/ParameterPass
können Sie auch Informationen über die Arbeit mit Objekten hinzufügen.
Ist eine Schnittstelle nicht außerhalb der Klasse angesiedelt?
Welchen Unterschied macht das für Objekte? Eine Schnittstelle ist in dieser Interpretation ein Datentyp, da ihre Beschreibung die Eigenschaften von Objekten hinreichend klar definiert. Sie definiert das äußere Verhalten von Objekten.
In den von mir zitierten Materialien erwähnen die OOP-Gegner, dass es unmöglich ist, die Klassenstruktur sofort zu erstellen, ohne den Algorithmus zu implementieren, weshalb in der OOP-Umgebung so oft Refactoring praktiziert wird und die Klassen die Entwicklung mit ihrer ewigen Neugestaltung verlangsamen. Und das ist wirklich wahr. Wenn man etwas Neues einführt und nicht versteht, wozu es führen kann, muss man den Unterricht wiederholen, und zwar mehr als einmal.
Die Erstellung einer guten Klassenarchitektur ist ein Stolperstein für Anfänger. Im Wesentlichen geht es bei der OOP-Programmierung darum, eine eigene"Sprache" zu schreiben, eine Sprache, die in Zukunft einfach und schnell zu erstellen ist. Die Schnittstelle ist die Essenz einer Sprache, die für eine bestimmte Aufgabe konzipiert ist. Die Schnittstelle darf nämlich nicht als eine Konstruktion "vom Typ" der Klasse verstanden werden, als ein Vertrag für die Klasse, der im Code ausgeführt werden muss (in MQL existiert er nicht und die Rolle der Schnittstelle kann schwach von virtuellen Methoden erfüllt werden).
Sie können zum Beispiel eine "Sprache" für die Erstellung neuer EAs erstellen, die es Ihnen ermöglicht, das allgemeine Schema von EAs aus Objekten in wenigen Zeilen zusammenzustellen. Sie können fertige Signale und Bedingungen verwenden oder eigene Signalklassen entwickeln und in Analogie dazu Ihre eigene Bibliothek erstellen. Diese Möglichkeit bietet der MQL5 Wizard.
Oft ist das Schema der Anwendung bereits entwickelt und "OOP-Programmierung" läuft im Wesentlichen auf die Verwendung vorhandener Klassen mit begrenzten Freiheitsgraden für das Schreiben eigener Funktionalität hinaus - das ist praktisch. Das ist der Grund, warum Frameworks so beliebt sind. Sie beseitigen unnötige Probleme und Kopfschmerzen bei der Entwicklung der Anwendungsarchitektur. Etwas Eigenes zu schreiben bedeutet, eine Erbenklasse einer der Framework-Klassen zu erstellen und darin die Implementierung bestimmter Backend-Methoden zu schreiben, die bereits in die allgemeine Anwendungslogik eingebaut sind (OnInit, OnTick, zum Beispiel).
...
Die Erstellung einer kompetenten Klassenarchitektur ist ein Stolperstein für Anfänger. Im Wesentlichen geht es bei der OOP-Programmierung darum, eine eigene"Sprache" zu schreiben, eine Sprache, die in Zukunft leicht und schnell zu erstellen ist. Die Schnittstelle ist die Essenz einer Sprache, die für eine bestimmte Aufgabe konzipiert ist. Schnittstelle sollte nicht als ein Konstrukt des "Typs" der Klasse verstanden werden, als ein Vertrag für die Klasse, der im Code ausgeführt werden muss (in MQL gibt es ihn nicht, und die Rolle der Schnittstelle kann durch virtuelle Methoden validiert werden).
...
Der Sinn von OOP besteht vielmehr darin, eine eigene Architektur zu entwickeln. Sobald wir eine klare, übersichtliche, intuitive Architektur haben, passt alles, und weder die Komplexität des Projekts noch sein Umfang sind dann noch einschränkende Faktoren. Um diese sehr klare Architektur zu erreichen, müssen Sie jedoch eine Klasse nach der anderen umschreiben, um diesem anfänglich vagen Ideal näher zu kommen.