PLO. Fragen zur Anwendung - Seite 10

 

Interesting:

Die von Alexander(AlexSTAL) vorgeschlagene Methode hätte das Problem lösen können (abgesehen von der gewissen Problematik, die sie mit sich bringt).

Halt, halt, halt, halt!

Ich habe es nicht vorgeschlagen, sondern gesagt, dass es eine Möglichkeit gibt.

Und was ist dein Problem, dass ich es nicht verstehe?

Sie müssen ein Beispiel diskutieren, bei dem die Hälfte der Logik fehlt und die Hälfte falsch ist (ein Überbleibsel aus der Anfangszeit der OOP)?

 
AlexSTAL:

Halt, halt, halt, halt!

Ich habe es nicht vorgeschlagen, sondern gesagt, dass es eine Möglichkeit gibt.

Und was ist dein Problem, dass ich es nicht verstehe?

Angenommen, Sie müssen verschiedene Objekte in ein Array einfügen.

Gleichzeitig sollten alle Eigenschaften dieser Objekte in demselben Array gespeichert werden und es sollte Zugriff auf alle Ereignisse und Methoden bestehen.

Die von Ihnen angebotene Möglichkeit (die Implementierung kann unterschiedlich sein) erlaubt, soweit ich das verstanden habe, den Zugriff auf die Funktionalität der Objekte (Ereignisse und Methoden).

Es ist jedoch unwahrscheinlich, dass die Speicherung von Daten in einem Array mit einem Vorgängertyp funktioniert (wenn man bedenkt, dass diese Daten nicht im Vorgängertyp deklariert wurden).


Lassen Sie mich meinen Gedankengang verdeutlichen.

Wenn wir bei diesem Beispiel stehen bleiben, dann:

1. Wir können z. B. ein Array erstellen, in dem die Art des Objekts, die Position in X und die Position in Y gespeichert wird;

2. Wir könnten versuchen, ein eindeutiges Objekt durch seinen Zeiger zu identifizieren (obwohl bei der Arbeit mit einem Objekt der Zeiger möglicherweise nicht verwendet wird, dann wäre es wünschenswert, so etwas wie einen Handle zu haben);

Eine dumme Frage (ich sehe keine andere Lösung), warum einen Zeiger als Handle verwenden (erstellen Sie eine Eigenschaft im Vorfahren und füllen Sie es im Konstruktor)?

Wir haben nicht die Möglichkeit, die Eigenschaften der Nachkommen in einem Array zu speichern (nur die, die nicht im Vorgänger definiert sind). Soweit ich weiß, können wir zum Beispiel den Radius eines Kreises oder die Seitenlänge eines Quadrats nicht in einem Array speichern.

 
Interesting:

3. wir erhalten nicht die Möglichkeit, Eigenschaften von Nachkommen im Array zu speichern (nur die, die nicht im Vorgänger geprägt wurden). Soweit ich weiß, können wir zum Beispiel den Radius eines Kreises oder die Seitenlänge eines Quadrats nicht in einem Array speichern.

Warum sollte es nicht funktionieren... Sie sprechen sie nicht direkt an, sondern verwenden Ihre "GetValue"-Funktion mit dem Parameter "Radius" (wenn das Objekt ein Kreis ist)... Dies ist nur eine Möglichkeit...

Sie stellen eine einfache spezifische Aufgabe

 
AlexSTAL:

Warum sollte es nicht funktionieren... Sie sprechen sie nicht direkt an, sondern verwenden Ihre "GetValue"-Funktion mit dem Parameter "Radius" (wenn das Objekt ein Kreis ist)... Dies ist nur eine Möglichkeit...

Sie stellen ein einfaches, spezifisches Problem

Die Aufgabe ist einfach, aber wer kann schon sagen, dass sie leicht zu realisieren ist.

Die Aufgabe besteht darin, verschiedene Objekte (Abkömmlinge der Basisklasse) mit ihren Daten in einem Array zu erfassen.

Machen wir uns klar, dass wir zusammen mit ihren Daten!!!

2. GetArea() für jeden Abkömmling;

3. Fügen Sie die folgenden Funktionen hinzu:

a. Berechnen Sie den Umfang des Quadrats - Seite *4;

б. Berechnung des Umfangs eines Kreises - 2πR.

3. Fügen Sie der Bibliothek weitere Formen hinzu - Rechteck (zwei Seiten) und Dreieck.

4. Fügen Sie die folgenden Funktionen hinzu:

a. Berechnen Sie den Flächeninhalt eines Rechtecks - Basis mal Höhe;

б. Berechnen Sie den Umfang eines Rechtecks - Summe der Seiten *2;

в. Berechnung des Flächeninhalts eines Dreiecks;

г. Berechnung des Umfangs eines Dreiecks.

5. Identifizieren Sie jedes Objekt einzeln (unter allen Objekten und unter den Objekten seiner Klasse).

Vorzugsweise mit oder ohne Zeiger.

6. Berechne den Umfang und die Fläche der Formen, indem du nur die in der Matrix gespeicherten Daten verwendest.


PS

Es ist nicht erlaubt, Code von Nachkommen auf den Vorfahren zu übertragen (es sei denn, dieser Code gilt für alle Vorfahren).

D.h. Sie können z.B. keinen Radius in einen Vorgänger übertragen, da ein Quadrat, ein Rechteck und ein Kreis keinen Radius haben.

Neue Funktionen können zu einem Vorfahren hinzugefügt werden, solange sie für alle Nachkommen gelten.

Wir nehmen den Code im Trailer als Grundlage.

Когда нужно использовать указатели в MQL5
Когда нужно использовать указатели в MQL5
  • 2010.03.25
  • MetaQuotes Software Corp.
  • www.mql5.com
Все объекты в MQL5 по умолчанию передаются по ссылке, но есть возможность использовать и указатели объектов. При этом есть опасность получить в качестве параметра функции указатель неинициализированного объекта. В этом случае работа программы будет завершена критически с последующей выгрузкой. Автоматически создаваемые объекты как правило такой ошибки не вызывают, и в этом отношении они достаточно безопасны. В этой статье мы попробуем разобраться в чем разница между ссылкой и указателей, когда оправдано использование указателей и как написать безопасный код с использованием указателей.
Dateien:
Forum-3.mq5  11 kb
 

Innerhalb eines einzelnen Arrays habe ich persönlich das Problem gelöst, indem ich einfach Variablen für die Speicherung von Fläche und Umfang zum Vorgänger hinzugefügt habe und eine Funktion, um Daten in sie zu schreiben.

In diesem Fall, wenn das Ergebnis von GetArea() und anderen Funktionen der direkten Berechnung kontrolliert wird.

Ich scheine nicht gegen meine eigenen Regeln verstoßen zu haben.

 

Ich habe eine Möglichkeit zur Umsetzung des von Ihnen beschriebenen Ansatzes skizziert.

Er ist nicht vollständig, aber er ist der wichtigste Ansatz

Dateien:
_script.mq5  4 kb
 
AlexSTAL:

Ich habe eine Möglichkeit zur Umsetzung des von Ihnen beschriebenen Ansatzes skizziert.

Er ist nicht vollständig, aber er ist der wichtigste Ansatz

Der Ansatz ist klar. Dies ist wahrscheinlich eine der besten Lösungen für ein ähnliches Problem.

Zumindest im Moment.

 
Interesting:

Die Aufgabe ist einfach, aber wer sagt, dass sie leicht umzusetzen ist?

1. Die Aufgabe besteht darin, verschiedene Objekte (Abkömmlinge einer Basisklasse) zusammen mit ihren Daten in ein Array zu schreiben.

...
Spreadsheets in MQL5 wurde das Problem bereits gelöst und beschrieben.
 
Urain:
Tabellenkalkulationen in MQL5 haben das Problem bereits gelöst und beschrieben.

Wie gut es ist, lesen zu können... :)

Auch kein schlechter Ansatz, obwohl, wie ich verstanden habe, beide Ansätze auf der Übermittlung/Lesung nur eines Parameters (wenn auch unterschiedlicher Art) beruhen.

Aber was tun, wenn es viele Parameter gibt und es unmöglich ist, sie alle in einer Basisklasse unterzubringen?

Soweit ich das verstanden habe, sollte der Index des zu übergebenden Parameters zusätzlich angegeben werden (es kann auch ein Array mit nach Index gestapelten Parametern in der Klasse angelegt werden).

 
Interesting:

Wie gut es ist, lesen zu können... :)

Auch kein schlechter Ansatz, obwohl, wie ich verstanden habe, beide Ansätze auf der Übermittlung/Lesung nur eines Parameters (wenn auch unterschiedlicher Art) beruhen.

Und was ist zu tun, wenn es viele Parameter gibt und es unmöglich ist, sie alle in die Basisklasse aufzunehmen?

Soweit ich verstehe, ist es möglich, einen Index des zu übergebenden Parameters einzugeben (es ist auch möglich, ein Array mit nach Index gestapelten Parametern in einer Klasse zu erstellen)?

Ich habe es dreimal gelesen und verstehe immer noch nicht, worum es in der Botschaft geht.
Grund der Beschwerde: