PLO - Seite 8

 

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.

bool func(CMy*& obj)

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

returning a pointer as a function parameter
returning a pointer as a function parameter
  • stackoverflow.com
Im trying to return the data pointer from the function parameter: bool dosomething(char *data){ int datasize = 100; data = (char *)malloc(datasize); // here data address = 10968998
 
flops:

Ich konnte in der Dokumentation keine Referenzrückgabe in den Funktionsparametern finden.

Sie meinen dies: MQL5-Referenz / Sprachgrundlagen / Datentypen / Referenzen. Modifikator & und Schlüsselwort this?
 
flops:

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:

CMy* func()
{
...
  CMy* obj;
  obj = new CMy();
  return(obj);
...
}
 
Vigor:

Ich bin ein Befürworter von OOP, weil ich die Vorteile der Programmierung von unten nach oben verstanden habe. Von Objektinteraktionsschnittstellen zur Klassenimplementierung.

Ist eine Schnittstelle nicht extern zu einer Klasse?
 
220Volt:

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.

 
Yedelkin:
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.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Andrei01:
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).

 
Vigor:

...

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, seine eigene Architektur zu schreiben. Sobald wir eine gut definierte, klare und intuitive Architektur haben, passt alles, und weder die Komplexität noch der Umfang des Projekts sind die einschränkenden 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.
 
C-4:
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.
+1