Fehler, Irrtümer, Fragen - Seite 759

 
WWer:

Es sollte also so sein, dass die Rolle des Kopierkonstruktors von einem überladenen Zuweisungsoperator übernommen wird?

Ich weiß nicht, was richtig ist, aber der Zuweisungsoperator in VS übernimmt nicht die Rolle des Kopierkonstruktors.
class tt
{
public:
        int f;
        tt(tt& u) {f = 1;}                // Копирующий конструктор, при выполнении его f == 1
        tt(){}
        void operator=(tt &u){f = 100;}   // При выполнении f == 100
};

tt fn()
{
        tt q3;
        return(q3);
}

int _tmain(int argc, _TCHAR* argv[])
{
        tt q2 = fn();
        std::cout<<q2.f;
        char input[54];
        std::cin>>input;
        return 0;
}

Der Bildschirm zeigt 1 an, d.h. der Kopierkonstruktor wird ausgeführt.

Ich denke, es ist dies: "2) das Entkommentieren eines Stopps mit einem überladenen Zuweisungsoperator" soll nicht helfen.

 
220Volt:
Ich weiß nicht, was richtig ist, aber der Zuweisungsoperator in VS übernimmt nicht die Rolle des Kopierkonstruktors.

1 wird angezeigt, d.h. der Kopierkonstruktor wird ausgeführt.

Ich denke Folgendes: "2) das Auskommentieren eines Stopps mit einem überladenen Zuweisungsoperator" sollte nicht helfen.

Der Kopierkonstruktor wird hier ausgeführt

tt q2 = fn();
nicht innerhalb der Funktion fn().
 
mql5:

Der Kopierkonstruktor wird hier ausgeführt

und nicht innerhalb der Funktion fn().

In dieser Variante:

class tt
{
public:
        int f;
        tt(tt& u) {f = 1;}
        tt(){f = 198;}
        void operator=(tt &u){f = 100; std::cout<<"Выполнился присваивающий конструктор";}
};

tt fn()
{
        tt q3;
        return(q3);
}

int _tmain(int argc, _TCHAR* argv[])
{
        tt q2 = fn();
        std::cout<<q2.f;
        char input[54];
        std::cin>>input;
        return 0;
}
Die Zeile "Assignment constructor is executed" wird nicht ausgegeben.
 

Und so wird es hergeleitet:

tt q2;
q2 = fn();
WWer, wenn Sie in Analogie zu VS auf die konkrete Situation eingehen müssen, geben Sie ein konkretes Beispiel für das Kopieren/Zuordnen. Was ausgeführt wird, wird an Ort und Stelle entschieden.
 
WWer:

Warum sollte sie initialisiert werden? Es ist eine Instanz einer Klasse, die einen Konstruktor für genau diesen Zweck hat.

Ja, wirklich, tut mir leid.


Und wie schreibt man einen korrekten Kopierkonstruktor für diesen Zweck?

Ihre Funktion getCopy(), die versucht, das Objekt zurückzugeben, ist ganz korrekt geschrieben. Nachdem die Zuweisung überschrieben wurde, gibt sie bereits einen Zeiger zurück, und der Fehler verschwindet.

--

Die Verwirrung kann hier durch die Tatsache verursacht werden, dass die Sprache einen gewissen "Syntax-Backlash" hat, der mit der gleichen syntaktischen Darstellung des Zugriffs auf die Felder eines statischen und eines dynamischen Objekts verbunden ist (mit einem Punkt anstelle eines Pfeils, was übrigens sehr praktisch ist). Dies ist sehr verbreitet und kann die Unterscheidung zwischen Objekten und Objektzeigern etwas verwischen, was wiederum zu einigen Illusionen führen kann, z. B. dass etwas einer statischen (oder automatischen) Objektvariablen zugewiesen werden kann. Ganz im Gegenteil, eine Objektvariable links von einer Zuweisung ist immer ein Zeiger, wenn der Kopierkonstruktor nicht definiert ist.

 
Leider unterscheidet sich MQL5 in diesem Punkt von C++.

C++ konstruiert das q2-Objekt innerhalb der Funktion fn() im Rücklauf, deshalb funktioniert der Kopierkonstruktor.

In MQL5 wird das Objekt von außen konstruiert, daher gibt es Unterschiede. Wir sollten sie eliminieren.


Für diejenigen, die es interessiert: Es heißt Rücklaufwertoptimierung

 

Liebe Kolleginnen und Kollegen, guten Tag!

Können Sie mir sagen, wie ich Kurswerte für verschiedene Finanzinstrumentesynchronisieren kann? Ich meine damit zum Beispiel die Schlusskurse von Barren zu einem bestimmten Zeitpunkt in der Vergangenheit für verschiedene Instrumente. Die Verwendung der CopyClose-Funktion und das Abrufen der Werte über den Index der Balken ist nicht ganz korrekt, da bei verschiedenen Instrumenten einige Balken fehlen können. Soweit ich mich erinnere, hat mql4 die BarShift-Funktion nach Zeit, gibt es ein Analogon auf mql5?

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyClose - Документация по MQL5
 

Wenn Sie die Uhrzeit kennen, können Sie diese Funktion nutzen.

Adressierung nach Startdatum und Anzahl der benötigten Artikel

intCopyClose(
stringsymbol_name,// Symbolname
ENUM_TIMEFRAMESZeitrahmen,// Zeitraum
datetimestart_time,// ab derDatum
intcount,// wie viele wir kopieren
doubleclose_array[]// Array zum Kopieren der Schlusskurse
);

 
Karlson:

Wenn Sie die Uhrzeit kennen, können Sie diese Funktion nutzen.

Beziehen Sie sich auf das Startdatum und die Anzahl der benötigten Artikel

intCopyClose(
stringsymbol_name,// Name des Symbols
ENUM_TIMEFRAMEStimeframe,// Zeitraum
datetimestart_time,//ab welchem Datum
intcount,// wie viele wir kopieren
doubleclose_array[]// Array zum Kopieren der Schlusskurse
);

Angenommen, ich möchte das Verhältnis von close[i] EUR/USD und close[i] GBP/USD ermitteln, aber wenn ich den Index i verwende, können die Balken zeitlich ohnehin unterschiedlich sein, weil einige Balken fehlen.

Mit anderen Worten, ich muss CopyClose(Symbol, 0, date_of_current_bar, 1, array) in Zyklen für jeden Balken verwenden?

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyClose - Документация по MQL5
 

Ich habe den Eindruck, dass Bars von älteren TF selten "verschwinden".

Eine andere Variante besteht darin, die Zeit dieses Taktes gleichzeitig durch CopyTime() zu erhalten.

Und die dritte Möglichkeit (wahrscheinlich die einfachste) ist die gleichzeitige Verwendung von CopyRates in der Struktur.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - Документация по MQL5