![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
Das bedeutet, dass Sie eine Instanz mit dem Operator new erstellen müssen.
Es gibt eine Sache, die ich nicht verstehe. Welche guten Gründe gibt es, die Verwendung des neuen Betreibers zu erzwingen? Geht es auch ohne?
Sie wird benötigt, wenn Sie Objekte dynamisch erstellen wollen. Wenn Sie nicht im Voraus wissen, wie viele Objekte und welche Arten von Objekten benötigt werden.
Так я вот одного не пойму. Какие веские причины принуждают к использованию оператора new ? Без него типа никак?
Wird benötigt, wenn Sie Objekte dynamisch erstellen müssen. Wenn Sie nicht im Voraus wissen, wie viele Objekte und welche Arten von Objekten benötigt werden.
Sie können dynamische Klassenarrays verwenden. Bei MQL funktioniert das. In C++ kann es zu Problemen bei der Initialisierung von Klassenmitgliedern kommen. Deshalb ist es besser, einen intelligenten Zeiger in das Array zu setzen. Sie müssen sich also nicht mit der Initialisierung der Klasse und dem Löschen des Speichers befassen.
Wie lässt sich diese Konstruktion "lesen"?
Ah, im Besonderen:
Ich sehe es mir an, aber ich verstehe nicht, was los ist...Wie lässt sich diese Konstruktion "lesen"?
ptr wird in den Typ cFather(Klasse) umgewandelt und seine (cFather) Methode GetData() wird aufgerufen
etwa so...
ptr wird in den Typ cFather(Klasse) umgewandelt und seine (cFather) Methode GetData() wird aufgerufen
etwa so...
Das ist eine seltsame Sache... Ich dachte, so ungefähr, aber... es ist zu viel, um auf einen Typ (Klasse) geworfen zu werden. In der Programmierung ist es, soweit ich gehört habe, ohnehin nicht empfehlenswert, auf einen Typ (Klasse) zu casten. Aber es handelt sich nicht nur um eine Standard-Typkonvertierung, sondern vielmehr um eine Klassenkonvertierung.
Nun, lassen Sie uns noch einmal zu diesem Code zurückkehren:
Hier in den Parametern des Prototyps der Funktion f ist deutlich zu sehen, dass die Funktion f eine Methode der Klasse cFather in den Parametern übernimmt. Außerdem sehen wir im START-Code die folgende Situation:
f(ptr); // вернет 3
Hier nimmt die Funktion f einen Zeiger auf die Klasse cChild und nicht auf eine Methode der Klasse cFather. Da cChild obj, *ptr = GetPointer( obj );
Was ist die Logik dahinter?
Hm... Logik wo?
in der f()-Methode ist es meiner Meinung nach logisch, dass der eingehende Parameter für cFather (oder seine Nachkommen) korrekt verarbeitet wird
Hm... Logik wo?
in der f()-Methode ist es meiner Meinung nach logisch, dass der eingehende Parameter für cFather (oder seine Nachfolger) korrekt behandelt wird
D.h.
hier ist *p ein Zeiger auf cFather?
Gleichzeitig lerne ich C++ und bin etwas verwirrt von ähnlichem Vokabular. Zeiger sind hier jedoch nicht dass elbe.
D.h.
hier ist *p ein Zeiger auf cFather?
Gleichzeitig lerne ich C++ und bin etwas verwirrt von ähnlichem Vokabular. Die Hinweise hier sind jedoch nicht diesel ben.
Es ist schon ein paar Wochen her, dass ich eine Frage hatte. Ich beschloss, sie zu fragen. Es ist nicht allzu kompliziert, aber logischerweise frage ich mich, ob das eine Option ist. Hier ist der Code:
In diesem Code gibt es nur 2 öffentliche Funktionen:
Und die beiden privaten Funktionen werden bei Bedarf direkt über die öffentliche Funktion aufgerufen, bzw. über die öffentliche Funktion. Interessant ist, dass die Funktion void SetName(string n) den Parameter n hat, aber die beiden privaten Methoden private: string GetFirstName(string full_name) und string GetLastName(string full_name) aus irgendeinem Grund nicht denselben Parameter haben. Nimmt man jedoch genau diesen Code (nicht den anderen), werden die privaten Methoden durch die öffentlichen mit denselben Parametern aufgerufen, und es gibt keinen anderen Weg. Warum sollte ich also den Parametern unterschiedliche Namen geben?
Ich hoffe, die Frage ist klar.