Perguntas sobre OOP em MQL5 - página 84

 
Pavel Verveyko:
É possível declarar uma matriz estática em uma seção de classe pública e rubricá-la no construtor? (como abaixo) (ou apenas elemento por elemento?)

você pode

ou talvez você esteja procurando por uma inicialização estática da matriz, afinal?

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:
uma matriz estática pode ser declarada na seção de classe pública e rubricada no construtor? (como abaixo) (ou apenas elemento por elemento?)

É mais ou menos assim:

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

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

A a;
Em geral, esta pobreza do OOP é marcante no contexto de seu esplendor. Por que não podemos inicializar variáveis e matrizes como de costume quando as declaramos? Não duvido, os teóricos vão agora mover muitas teorias que me provam ser um idiota, mas mesmo assim...
 
Sergey Dzyublik:

Você poderia inicializar uma matriz local e executar o ArrayCopy para o campo de matriz apropriado:

Este também foi um pensamento, ele também pode ser colocado em âmbito global fora de qualquer classe.
É ainda mais fácil, mas eu queria que fosse OOP))

 
Dmitry Fedoseev:

É mais ou menos assim:

Em geral, esta pobreza do OOP é marcante no contexto de seu esplendor. Por que não podemos inicializar variáveis e matrizes como de costume quando as declaramos? Eu não duvido, os teóricos inventarão muitas teorias para provar que sou um idiota, mas ainda assim...

Eu tenho exatamente o mesmo pensamento)) toda vez que escrevo com o OOP.

 
Pavel Verveyko:

Este também foi um pensamento, ele pode ser colocado no âmbito global fora de qualquer classe.
É ainda mais fácil, mas eu queria que fosse OOP))

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

você pode

ou talvez você esteja procurando uma inicialização de matriz estática, afinal?

opção interessante.

está chamando um "método com construtor"?

 
Pavel Verveyko:

opção interessante.

isto é uma chamada "método com construtor"?

não

é assim que se inicializa a estática.

não é preciso inicializá-lo, é assim que o código será:

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

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

não é uma chamada de método, mas o nome completo do campo da classe A::Massa[5];

mas se você apagar a linha, há um erro de compilação - a estática precisa alocar memória antes da instância de classe ser criada - isto é o que a linha amarela faz
 
Igor Makanu:

não

é assim que se escreve a inicialização da estática

não é preciso inicializá-lo, é assim que o código será:

obrigado, acontece que esta linha(estática bool A::Mass[5];) não pode ser transferida para o construtor de forma alguma?

 
Pavel Verveyko:

ou esta é a única forma de inicializar a estática em um caso como este?

poste acima suplementado

sim, a estática deve ser descrita separadamente,@fxsaber me ajudou a compreendê-lahttps://www.mql5.com/ru/forum/325418/page4#comment_16116740

você também pode inicializar as classes estáticas na MQL5.


Pavel Verveyko:

ou seja, esta linha(estática bool A::Mass[5];) não pode ser transferida para o construtor?

Não, é um campo de classe estático. Você precisa alocar memória com antecedência, não no momento da criação da instância de classe

e você o utilizará mais como uma matriz usual

Se a questão é sobre inicialização na forma de uma única corda, então a versão de Sergei é o que você está procurando, e você simplesmente não precisa de estática.

 
Igor Makanu:

poste acima suplementado

sim, a estática deve ser descrita separadamente,@fxsaber me ajudou a compreendê-lahttps://www.mql5.com/ru/forum/325418/page4#comment_16116740

você também pode inicializar as classes estáticas em MQL.

Obrigado, agora eu tentei e percebi que é possível acessar uma matriz dessa forma.

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

   return(INIT_SUCCEEDED);
}

Para ser honesto, temos o OOP, mas não o vi no Help. É uma pena que não descreva tais nuances.

muito obrigado, a todos que responderam!