Ja, danke für Ihre Aufmerksamkeit, Sie haben Recht, es ist auch in dieser Variante kein Singleton.
Über implizite Konstruktoren und Operatoren - machen Sie sie explizit und versuchen Sie, sie zu verwenden, ich denke, es wird nicht funktionieren, da man einen Zeiger auf ein Objekt nicht derefenzieren kann
In MQL4++ scheinen so genannte "Pointer" implizit dereferenziert zu werden:
#property strict/******************************************************************************/class A {
public:
/******************************************************************************/
A() {
Print("class A: Конструктор по умолчанию");
}
/******************************************************************************/
A(const A &a) {
Print("class A: Конструктор копии");
}
/******************************************************************************/void operator =(const A &a) {
Print("class A: Оператор присваивания");
}
};
/******************************************************************************/void assign(A &l, A &r) {
Print("Функция assign()");
l = r;
}
/******************************************************************************/voidOnStart() {
Print("OnStart(): Создаём по умолчанию");
A a;
Print("OnStart(): Получаем \"адрес\" первого объекта");
A *p = GetPointer(a);
Print("OnStart(): Создаём копию, прямо инициализируя предыдущим объектом");
A b(a);
Print("OnStart(): Выполняем присваивание, используя предыдущий объект");
b = a;
Print("OnStart(): Создаём копию, прямо инициализируя так называемым \"указателем\" на предыдущий объект");
A c(p);
Print("OnStart(): Выполняем присваивание, используя так называемый \"указатель\" на предыдущий объект");
b = p;
Print("OnStart(): Выполняем присваивание так называемому \"указателю\" значения его же самого");
p = p;
// *p = *p; Ошибка: '*' - unexpected token, то есть, присвоить объекту другой объект, если есть "адреса" обоих объектов, не так-то просто...Print("OnStart(): Выполняем присваивание объекту по \"адресу\" значения его же самого с помощью вспомогательной функции");
assign(p, p);
}
Das Programm wird kompiliert und erfolgreich ausgeführt:
22:23:46 Script 3 EURUSDm,H1: loaded successfully
22:23:463 EURUSDm,H1: initialized
22:23:463 EURUSDm,H1: OnStart(): Создаём по умолчанию
22:23:463 EURUSDm,H1: class A: Конструктор по умолчанию
22:23:463 EURUSDm,H1: OnStart(): Получаем "адрес" первого объекта
22:23:463 EURUSDm,H1: OnStart(): Создаём копию, прямо инициализируя предыдущим объектом
22:23:463 EURUSDm,H1: class A: Конструктор копии
22:23:463 EURUSDm,H1: OnStart(): Выполняем присваивание, используя предыдущий объект
22:23:463 EURUSDm,H1: class A: Оператор присваивания
22:23:463 EURUSDm,H1: OnStart(): Создаём копию, прямо инициализируя так называемым "указателем" на предыдущий объект
22:23:463 EURUSDm,H1: class A: Конструктор копии
22:23:463 EURUSDm,H1: OnStart(): Выполняем присваивание, используя так называемый "указатель" на предыдущий объект
22:23:463 EURUSDm,H1: class A: Оператор присваивания
22:23:463 EURUSDm,H1: OnStart(): Выполняем присваивание так называемому "указателю" значения его же самого
22:23:463 EURUSDm,H1: OnStart(): Выполняем присваивание объекту по "адресу" значения его же самого с помощью вспомогательной функции
22:23:463 EURUSDm,H1: Функция assign()
22:23:463 EURUSDm,H1: class A: Оператор присваивания
22:23:463 EURUSDm,H1: uninit reason 022:23:46 Script 3 EURUSDm,H1: removed
Es sieht so aus, als ob die Sprache KEINE Dereferenzierung definiert hat, sondern eine Standardkonvertierung von Zeiger zu Referenz definiert ist, bei der eine implizite Dereferenzierung stattfindet. Diese Besonderheit wird von der Funktion assign() ausgenutzt. Ohne eine Funktion geht es nicht, denn es sieht so aus, als ob Referenzen nur in Funktionsparametern angegeben werden können...
ALXIMIKS:
Warum funktioniert es nicht, 'ptr' - kann keine geschützte Mitgliedsfunktion aufrufen:
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Ja, danke für Ihre Aufmerksamkeit, Sie haben Recht, es ist auch in dieser Variante kein Singleton.
Über implizite Konstruktoren und Operatoren - machen Sie sie explizit und versuchen Sie, sie zu verwenden, ich denke, es wird nicht funktionieren, da man einen Zeiger auf ein Objekt nicht derefenzieren kann
In MQL4++ scheinen so genannte "Pointer" implizit dereferenziert zu werden:
Das Programm wird kompiliert und erfolgreich ausgeführt:
Es sieht so aus, als ob die Sprache KEINE Dereferenzierung definiert hat, sondern eine Standardkonvertierung von Zeiger zu Referenz definiert ist, bei der eine implizite Dereferenzierung stattfindet. Diese Besonderheit wird von der Funktion assign() ausgenutzt. Ohne eine Funktion geht es nicht, denn es sieht so aus, als ob Referenzen nur in Funktionsparametern angegeben werden können...
ALXIMIKS:
Warum funktioniert es nicht, 'ptr' - kann keine geschützte Mitgliedsfunktion aufrufen :