Domande su OOP in MQL5 - pagina 84

 
Pavel Verveyko:
È possibile dichiarare un array statico in una sezione pubblica della classe e inizializzarlo nel costruttore? (come sotto) (o solo elemento per elemento?)

è possibile

o forse stai cercando un'inizializzazione statica dell'array dopo tutto?

class A
{
public:
   static bool Mass[5];
               A() { ArrayPrint(Mass); }
};

static bool A::Mass[5] = { false, true, false, true, true };
//+------------------------------------------------------------------+
void OnStart()
{
   A a;
}
//+------------------------------------------------------------------+
 
Pavel Verveyko:
un array statico può essere dichiarato nella sezione pubblica della classe e inizializzato nel costruttore? (come sotto) (o solo elemento per elemento?)

Va più o meno così:

class A{
   protected:
      static int x[];
      int my[];
   public:
      A(){
         ArrayCopy(my,x);
      }   
};

int A::x[]={1,2,3,4,5};

A a;
In generale, questa povertà di OOP colpisce contro la sua brillantezza. Perché non possiamo inizializzare le variabili e gli array come al solito quando li dichiariamo? Non dubito, i teorici ora muoveranno un sacco di teorie dimostrandomi un idiota, ma comunque...
 
Sergey Dzyublik:

Potete inizializzare una matrice locale ed eseguire ArrayCopy sul campo di matrice appropriato:

Anche questo era un pensiero, può essere messo in ambito globale al di fuori di qualsiasi classe.
È anche più facile, ma volevo che fosse OOP))

 
Dmitry Fedoseev:

Va più o meno così:

In generale, questa povertà di OOP colpisce sullo sfondo della sua brillantezza. Perché non possiamo inizializzare le variabili e gli array come al solito quando li dichiariamo? Non dubito che i teorici se ne usciranno con molte teorie per dimostrare che sono un idiota, ma comunque...

Ho lo stesso identico pensiero)) ogni volta che scrivo con OOP.

 
Pavel Verveyko:

Anche questo era un pensiero, può essere messo nell'ambito globale al di fuori di qualsiasi classe.
È ancora più facile, ma volevo che fosse OOP))

class CTest{
public:
   int a[4];
   CTest(){
      static int _a[]={1,2,3,4};
      ArrayCopy(a,_a);
   }
};
 
Igor Makanu:

è possibile

o forse stai cercando l'inizializzazione statica dell'array dopo tutto?

opzione interessante.

sta chiamando un "metodo con costruttore"?

 
Pavel Verveyko:

opzione interessante.

è una chiamata "metodo con costruttore"?

no

è così che si inizializza la statica.

non c'è bisogno di inizializzarlo, ecco come sarà il codice:

class A
{
public:
   static bool Mass[5];
               A() { ArrayPrint(Mass); }
};

static bool A::Mass[5];
//+------------------------------------------------------------------+
void OnStart()
{
   A a;
}
//+------------------------------------------------------------------+

questa non è una chiamata di metodo ma il nome completo del campo della classe A::Mass[5];

ma se cancellate la linea, c'è un errore del compilatore - la statica ha bisogno di allocare memoria prima che l'istanza della classe sia creata - questo è ciò che fa la linea gialla
 
Igor Makanu:

no

ecco come si scrive l'inizializzazione della statica

non dovete inizializzarlo, ecco come sarà il codice:

grazie, risulta che questa linea(static bool A::Mass[5];) non può essere trasferita al costruttore in nessun modo?

 
Pavel Verveyko:

o questo è l'unico modo per inizializzare la statica in un caso come questo?

post sopra integrato

sì, la statica dovrebbe essere descritta separatamente,@fxsaber mi ha aiutato a capirlohttps://www.mql5.com/ru/forum/325418/page4#comment_16116740

è possibile inizializzare le classi statiche anche in MQL5.


Pavel Verveyko:

cioè questa linea(static bool A::Mass[5];) non può essere trasferita al costruttore?

No, è un campo statico di classe. È necessario allocare la memoria in anticipo, non al momento della creazione dell'istanza della classe

e lo userete ulteriormente come un normale array

Se la domanda riguarda l'inizializzazione sotto forma di una singola stringa, allora la versione di Sergei è quello che state cercando, e non avete bisogno della statica.

 
Igor Makanu:

post sopra integrato

sì, la statica dovrebbe essere descritta separatamente,@fxsaber mi ha aiutato a capirlohttps://www.mql5.com/ru/forum/325418/page4#comment_16116740

è possibile inizializzare le classi statiche anche in MQL.

Grazie, ora ho provato e mi sono reso conto che è possibile accedere a un array in questo modo.

int OnInit()
{
   ArrayPrint(A::Mass);

   return(INIT_SUCCEEDED);
}

Per essere onesti abbiamo OOP, ma non l'ho visto in Help. È un peccato che non descriva queste sfumature.

grazie mille, a tutti quelli che hanno risposto!