Pavel Verveyko: Ist es möglich, ein statisches Array in einem öffentlichen Klassenteil zu deklarieren und es im Konstruktor zu initialisieren? (wie unten) (oder nur Element für Element?)
können Sie
oder sind Sie vielleicht doch auf der Suche nach einer statischen Array-Initialisierung?
class A
{
public:
staticbool Mass[5];
A() { ArrayPrint(Mass); }
};
staticbool A::Mass[5] = { false, true, false, true, true };//+------------------------------------------------------------------+voidOnStart()
{
A a;
}
//+------------------------------------------------------------------+
Pavel Verveyko: Kann ein statisches Array im öffentlichen Klassenteil deklariert und im Konstruktor initialisiert werden? (wie unten) (oder nur Element für Element?)
Es geht ungefähr so:
class A{
protected:
staticint x[];
int my[];
public:
A(){
ArrayCopy(my,x);
}
};
int A::x[]={1,2,3,4,5};
A a;
Im Allgemeinen ist diese Armut der OOP vor dem Hintergrund ihrer Brillanz auffällig. Warum können wir Variablen und Arrays nicht wie üblich initialisieren, wenn wir sie deklarieren? Ich bezweifle nicht, dass die Theoretiker jetzt eine Menge Theorien aufstellen werden, die mich als Idioten hinstellen, aber trotzdem...
Sie können ein lokales Array initialisieren und ArrayCopy in das entsprechende Arrayfeld ausführen:
Dies war auch ein Gedanke, kann es in globalen Bereich außerhalb jeder Klasse als gut platziert werden. Es ist sogar noch einfacher, aber ich wollte, dass es OOP ist))
Im Allgemeinen ist diese Armut der OOP vor dem Hintergrund ihrer Brillanz auffällig. Warum können wir Variablen und Arrays nicht wie üblich initialisieren, wenn wir sie deklarieren? Ich bezweifle nicht, dass die Theoretiker viele Theorien aufstellen werden, um zu beweisen, dass ich ein Idiot bin, aber trotzdem...
Ich habe jedes Mal, wenn ich mit OOP schreibe, genau denselben Gedanken)).
Dies war auch ein Gedanke, kann es in den globalen Bereich außerhalb einer Klasse platziert werden. Es ist sogar noch einfacher, aber ich wollte, dass es OOP ist))
class CTest{
public:
int a[4];
CTest(){
staticint _a[]={1,2,3,4};
ArrayCopy(a,_a);
}
};
Sie müssen es nicht initialisieren, der Code wird so aussehen:
class A
{
public:
staticbool Mass[5];
A() { ArrayPrint(Mass); }
};
staticbool A::Mass[5];//+------------------------------------------------------------------+voidOnStart()
{
A a;
}
//+------------------------------------------------------------------+
Dies ist kein Methodenaufruf, sondern der vollständige Name des Feldes der Klasse A::Mass[5];
aber wenn Sie die Zeile löschen, kommt es zu einem Compilerfehler - Statics müssen Speicher zuweisen, bevor die Klasseninstanz erstellt wird - das ist, was die gelbe Zeile tut
können Sie auch in MQL5 statische Klassen initialisieren.
Pavel Verveyko:
d.h. diese Zeile(staticbool A::Mass[5];) kann nicht in den Konstruktor übernommen werden?
Nein, es handelt sich um ein statisches Klassenfeld. Sie müssen den Speicher im Voraus zuweisen, nicht zum Zeitpunkt der Erstellung der Klasseninstanz.
und Sie werden es als gewöhnliches Array weiterverwenden
Wenn es um die Initialisierung in Form einer einzelnen Zeichenkette geht, dann ist die Version von Sergei das, was Sie suchen, und Sie brauchen keine Statik.
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.
Ist es möglich, ein statisches Array in einem öffentlichen Klassenteil zu deklarieren und es im Konstruktor zu initialisieren? (wie unten) (oder nur Element für Element?)
können Sie
oder sind Sie vielleicht doch auf der Suche nach einer statischen Array-Initialisierung?
Kann ein statisches Array im öffentlichen Klassenteil deklariert und im Konstruktor initialisiert werden? (wie unten) (oder nur Element für Element?)
Es geht ungefähr so:
Im Allgemeinen ist diese Armut der OOP vor dem Hintergrund ihrer Brillanz auffällig. Warum können wir Variablen und Arrays nicht wie üblich initialisieren, wenn wir sie deklarieren? Ich bezweifle nicht, dass die Theoretiker jetzt eine Menge Theorien aufstellen werden, die mich als Idioten hinstellen, aber trotzdem...Sie können ein lokales Array initialisieren und ArrayCopy in das entsprechende Arrayfeld ausführen:
Dies war auch ein Gedanke, kann es in globalen Bereich außerhalb jeder Klasse als gut platziert werden.
Es ist sogar noch einfacher, aber ich wollte, dass es OOP ist))
Es geht ungefähr so:
Im Allgemeinen ist diese Armut der OOP vor dem Hintergrund ihrer Brillanz auffällig. Warum können wir Variablen und Arrays nicht wie üblich initialisieren, wenn wir sie deklarieren? Ich bezweifle nicht, dass die Theoretiker viele Theorien aufstellen werden, um zu beweisen, dass ich ein Idiot bin, aber trotzdem...Ich habe jedes Mal, wenn ich mit OOP schreibe, genau denselben Gedanken)).
Dies war auch ein Gedanke, kann es in den globalen Bereich außerhalb einer Klasse platziert werden.
Es ist sogar noch einfacher, aber ich wollte, dass es OOP ist))
können Sie
oder sind Sie vielleicht doch auf der Suche nach einer statischen Array-Initialisierung?
interessante Option.
ruft eine "Methode mit Konstruktor" auf?
Interessante Option.
ist dies ein "Methode mit Konstruktor"-Aufruf?
keine
So initialisiert man die Statik.
Sie müssen es nicht initialisieren, der Code wird so aussehen:
Dies ist kein Methodenaufruf, sondern der vollständige Name des Feldes der Klasse A::Mass[5];
aber wenn Sie die Zeile löschen, kommt es zu einem Compilerfehler - Statics müssen Speicher zuweisen, bevor die Klasseninstanz erstellt wird - das ist, was die gelbe Zeile tutkeine
So wird die Initialisierung der Statik geschrieben
Sie müssen es nicht initialisieren, der Code wird so aussehen:
vielen Dank, es stellt sich heraus, dass diese Zeile(static bool A::Mass[5];) kann nicht auf Konstruktor in irgendeiner Weise übertragen werden?
oder ist dies die einzige Möglichkeit, die Statik in einem solchen Fall zu initialisieren?
Beitrag oben ergänzt
ja, die Statik sollte separat beschrieben werden,@fxsaber hat mir geholfen, sie zu verstehenhttps://www.mql5.com/ru/forum/325418/page4#comment_16116740
können Sie auch in MQL5 statische Klassen initialisieren.
d.h. diese Zeile(static bool A::Mass[5];) kann nicht in den Konstruktor übernommen werden?
Nein, es handelt sich um ein statisches Klassenfeld. Sie müssen den Speicher im Voraus zuweisen, nicht zum Zeitpunkt der Erstellung der Klasseninstanz.
und Sie werden es als gewöhnliches Array weiterverwenden
Wenn es um die Initialisierung in Form einer einzelnen Zeichenkette geht, dann ist die Version von Sergei das, was Sie suchen, und Sie brauchen keine Statik.
Beitrag oben ergänzt
ja, die Statik sollte separat beschrieben werden,@fxsaber hat mir geholfen, sie zu verstehenhttps://www.mql5.com/ru/forum/325418/page4#comment_16116740
können Sie auch statische Klassen in MQL initialisieren.
Danke, jetzt habe ich es ausprobiert und festgestellt, dass es möglich ist, auf diese Weise auf ein Array zuzugreifen.
Um ehrlich zu sein, wir haben OOP, aber ich habe es nicht in Help gesehen. Es ist schade, dass es solche Nuancen nicht beschreibt.
Vielen Dank an alle, die geantwortet haben!