Fehler, Irrtümer, Fragen - Seite 2563

 
Andrey Barinov:

?

Im Beispiel gibt es einen statischen Modifikator. Wenn Sie ihn entfernen, gibt der Compiler eine Warnung aus, wie es sein sollte

statisch kann von jedem Teil Ihres Codes aus mit dem Operator zur Kontextauflösung zugegriffen werden... aus einem beliebigen Codefragment! (Ich kann mich nicht an den Geltungsbereich erinnern, ich habe ihn in letzter Zeit nicht überprüft, aber höchstwahrscheinlich wird er global sein, als ob er ganz oben im Code beschrieben wäre, d.h. es spielt keine Rolle, wo die statische Methode/das statische Feld deklariert wurde)

 
Igor Makanu:

Auf eine Statik kann von jedem Teil des Codes aus über die Anweisung zur Kontextauflösung zugegriffen werden... aus jedem Teil des Codes! (Ich kann mich nicht an den Geltungsbereich erinnern, ich habe ihn in letzter Zeit nicht überprüft, aber höchstwahrscheinlich wird er global sein, da er ganz oben im Code beschrieben wird, d.h. es spielt keine Rolle, wo die statische Methode/das statische Feld deklariert wird)

Wie lange ist es her, dass es so wurde :)?

Für statische Objekte gelten dieselben Regeln (private, protected, public), sie müssen nur nicht erstellt werden.

Dies ist ein offensichtlicher Fehler.

 
Andrey Barinov:

Wie lange ist das schon so :)?

Ich weiß nicht, ich kann sicher sagen, dass vor ein paar Monaten@Ilyas Admin war Statik Initialisierung Verfahren zu erklären, und er erwähnte, dass Statik Methoden und Statik Felder zusammen mit globalen Variablen bei MQL-Programmstart initialisiert werden... gehen Sie weiter und suchen durch seine Beiträge

Andrej Barinow:

Für statische Objekte gelten dieselben Regeln (private, protected, public), sie müssen nur nicht erstellt werden.

Dies ist ein offensichtlicher Fehler.

Ich bin nicht bereit zu streiten und will es auch nicht, aber der Hilfetext zeigt das Verhalten von statischen Methoden

der MQL-Code macht große Schritte in Richtung des Verhaltens von C#-Programmen, die Situation ist dort ähnlich, sowie, wenn der Programmierer beschließt, Kontextauflösungsoperator zu verwenden, bedeutet dies, dass er bewusst die Hilfe des Compilers ablehnt, um Verletzungen der Datenintegrität in der Klasse zu identifizieren, gibt es klassische Möglichkeiten, Methoden und Felder ohne Kontextauflösungsoperator zu erhalten


UPD: Ich habe beschlossen, meine MQL-Bibliothek nach und nach neu zu schreiben, ich bin entsetzt zu bemerken, dass ich schreibe, wie ich in populären MQL-Codes Namen von Methoden und Feldern gesehen habe, die mit Namen von reservierten Wörtern übereinstimmen....imho ist dies auch ein Schritt, um Hilfe von Compiler zu vermeiden, wenn "brechen" Abhängigkeiten.... so-so ))))

 

Igor Makanu:

wenn der Programmierer sich für die Verwendung des Kontextauflösungsoperators entscheidet, bedeutet dies, dass er/sie bewusst die Hilfe des Compilers ablehnt, um eine Verletzung der Datenintegrität in der Klasse zu erkennen, denn es gibt klassische Wege, Methoden und Felder ohne Kontextauflösungsoperator zu erhalten

Ich glaube, Sie haben zu viel OOP geraucht. Machen Sie eine Pause und kommen Sie dann mit klarem Kopf zurück. Die Anweisung zur Kontextauflösung definiert die Sichtbarkeit, hat aber keine Auswirkungen auf den Zugriff.

 
TheXpert:

Ich denke, Sie haben zu viel OOP gehabt, nehmen Sie eine Pause und dann mit einem frischen Kopf. die Kontextauflösung Anweisung definiert Sichtbarkeit, hat aber keine Auswirkungen auf den Zugriff.

Nun, es liegt an mir zu entscheiden, was ich rauche und wann ich mich ausruhe ))))

SZY: es gibt immer viele Tricks in jeder Sprache mit Zugriff auf Speicherinhalte. Ich lese die Hobbys dort in den Kommentaren, gibt es regelmäßig Kämpfe über Python und C + +, noch einmal - es gibt mehr humane Möglichkeiten der Arbeit mit Feldern und Methoden, wenn Sie beschlossen, dass es schneller ist, dann sollten Sie nicht die Schuld, was Sie bekommen - in allen Compilern Sie immer brechen könnte, wo man nicht sollte)))

 
Igor Makanu:

Ich weiß nicht, ich kann mit Sicherheit sagen, dass vor ein paar Monaten@Ilyas Admin Statik Initialisierungsverfahren erklärt wurde und erwähnt, dass statische Methoden und statische Felder zusammen mit globalen Variablen bei MQL-Programmstart initialisiert werden... gehen Sie weiter und suchen Sie durch seine Beiträge

ich bin nicht bereit zu streiten und will es auch nicht, aber der Hilfetext stellt das Verhalten statischer Methoden dar

private" - erlaubt den Zugriff auf Variablen und Methoden einer Klasse nur durch Methoden dieser Klasse. "

Wo ist das Wort "nur" unklar?

OnStart ist keine Methode der Klasse A, wie im Beispiel beschrieben.

 
Aliaksandr Hryshyn:

private" - erlaubt den Zugriff auf Variablen und Methoden einer Klasse nur durch Methoden dieser Klasse. "

Wo ist das Wort "nur" unklar?

OnStart ist keine Methode der Klasse A, wie im Beispiel beschrieben.

Wir sprechen nicht über den Modifikator private, sondern über den Modifikator static - machen Sie Tests und sehen Sie, wie sich static in MQL verhält

 
Igor Makanu:

Ich weiß nicht, ich kann mit Sicherheit sagen, dass vor ein paar Monaten@Ilyas Admin Statik Initialisierungsverfahren erklärt wurde und erwähnt, dass statische Methoden und statische Felder zusammen mit globalen Variablen bei MQL-Programmstart initialisiert werden... gehen Sie weiter und suchen Sie durch seine Beiträge

Ich bin nicht bereit, zu widersprechen, aber der Hilfetext zeigt das Verhalten von statischen Methoden

Und imho denke ich nicht, dass es notwendig ist, mit Argumenten zu bestätigen - MQL bewegt sich viel in Richtung des Verhaltens von C#-Programmen, es hat eine ähnliche Situation, sowie wenn der Programmierer entscheidet, Kontextauflösungsoperator zu verwenden, bedeutet es, dass er bewusst die Hilfe des Compilers ablehnt, um Verletzungen der Datenintegrität in der Klasse zu identifizieren, gibt es klassische Möglichkeiten, Methoden und Felder ohne Kontextauflösungsoperator zu erhalten


UPD: Ich beschloss, meine MQL-Bibliothek nach und nach neu zu schreiben, ich bin entsetzt zu bemerken, dass ich schreibe, wie ich in populären MQL-Codes Namen von Methoden und Feldern sah, die mit Namen von reservierten Wörtern übereinstimmen....imho ist dies auch ein Schritt, um Hilfe von Compiler zu vermeiden, wenn "brechen" Abhängigkeiten.... so-so ))))

https://pikabu.ru/story/nevozmozhno_tak_nevozmozhno_2129852
 

?

es ist eine seltsame situation, alles außerhalb der klasse funktioniert seit langem mit dem staichi. und ich mache gerade einen großen aufstand darüber.... Reproduzieren Sie den Code doch einfach mal selbst:

int print(int value)
{  Print(value,":",__FUNCTION__); 
 return(value);
}
class A
{
private:
   static int        a1;
protected:
   static int        a2;
public:
   static int        a3;

};
//+------------------------------------------------------------------+
static int A::a1 = print(1);
static int A::a2 = print(2);
static int A::a3 = print(3);

//+------------------------------------------------------------------+
void OnStart()
{}
//+------------------------------------------------------------------+

Siehst du eine Objektinstanz? und es existiert in MQL ;)

SZZ: Und sie existiert auf der Ebene der Hilfe... was ist dein Problem mit mir?

https://www.mql5.com/ru/docs/basis/oop/staticmembers

Die fehlende Möglichkeit, Klassenmitglieder statisch zu deklarieren, würde dazu führen, dass diese Daten auf der globalen Programmebene deklariert werden müssten. Dies würde die Beziehung zwischen den Daten und der zugehörigen Klasse aufheben und widerspricht auch dem grundlegenden OOP-Paradigma der Kombination von Daten und Methoden in einer Klasse, um sie zu verarbeiten. Ein statisches Mitglied ermöglicht es, dass Klassendaten, die nicht spezifisch für eine einzelne Instanz sind, im Geltungsbereich der Klasse existieren.

Grund der Beschwerde: