Perguntas sobre OOP em MQL5 - página 81

 

Outra pergunta sobre fundição

existe este código:

struct SHash
   {
      ulong hash[2];
      SHash()                                {  }
      SHash(const double)                    { ArrayInitialize(hash, 0xAAAAAAAAAAAAAAAA);                }
      SHash(const SHash &val)                { ArrayCopy(hash, val.hash);                                }
      bool operator==(const SHash &val)const { return(hash[0] == val.hash[0] && hash[1] == val.hash[1]); }
   };
//+------------------------------------------------------------------+
class BASE
{
private:
   const SHash _hash;
protected:
   BASE(SHash &hash): _hash(hash)             {  }
};

class A:BASE
{
public:
   A(SHash &hash):BASE(hash)                 {  }
};


class B:BASE
{
public:
   B():BASE((SHash)0.0)                      {  }
};

//+------------------------------------------------------------------+
void OnStart()
{
   SHash h(0.0);
   A a(h);
}
//+------------------------------------------------------------------+

e quero inicializar a classe B com construtor sem parâmetros, mas não posso lançar a estrutura SHash ao construtor SHash(const duplo)

ou seja, eu preciso de um pouco de fundição (SHash) duplo

No meu exemplo, há um erro de compilação: "(SHash)" - operação de fundição inválida


se você o escrever desta maneira:

class B:BASE
{
public:
   B():BASE(0.0)                      {  }
};
erro: '0.0' - parâmetro passado como referência, variável esperada

 
Igor Makanu:

Outra pergunta sobre fundição

existe este código:

e quero inicializar a classe B com construtor sem parâmetros, mas não posso lançar a estrutura SHash ao construtor SHash(const duplo)

ou seja, eu preciso de um pouco de fundição (SHash) duplo

No meu exemplo, há um erro de compilação: "(SHash)" - operação de fundição inválida


se você o escrever desta maneira:

erro: '0.0' - parâmetro passado como referência, variável esperada

class B:BASE
{
public:
   B():BASE(SHash())                      {  }
};
 
Vladimir Simakov:

funciona desta maneira

mas precisa de 0xAAAAAAAAAAAAAA inicialização para estrutura SHash - é algum tipo de NULL - não obter hash MD5 da cadeia de teste (eu verifiquei)

SHash() construtor parece não ser necessário agora, mas parece ter sido necessário há alguns dias atrás )))) Então, no início não estava lá, depois corrigi um erro de compilação em algum lugar com este construtor vazio, ou ao comparar estruturas ou durante a inicialização... em geral, há uma alta probabilidade de que.... seja necessária embora pareça ser uma boa regra para inicializar todas as variáveis....

em geral, eu gostaria de ter uma variante ou inequívoca - não ))))

 
Igor Makanu:

funciona desta maneira

mas precisa de 0xAAAAAAAAAAAAAA inicialização para estrutura SHash - é algum tipo de NULL - não obter hash MD5 da cadeia de teste (eu verifiquei)

SHash() construtor parece não ser necessário agora, mas parece ter sido necessário há alguns dias atrás )))) Então, no início não estava lá, depois corrigi um erro de compilação em algum lugar com este construtor vazio, ou ao comparar estruturas ou durante a inicialização... em geral, há uma alta probabilidade de que.... seja necessária embora pareça ser uma boa regra para inicializar todas as variáveis....

em geral, eu gostaria de ter uma variante ou inequívoca - não )))

SHash(0.0)

mas adivinhe por si mesmo?)))

 
Vladimir Simakov:

mas adivinhe você mesmo?))

SHash((double)x)
 
Vladimir Simakov:

e adivinhe você mesmo?)))

class B:BASE
{
public:
   B():BASE(SHash(0.0))                      {  }
};

Oh, cara, isso funciona!

Acho que também tentei dessa forma, não sei por que não funcionou.

Obrigado!

mal feito ((!

 
Alexandr Andreev:

Sim, e onde você consegue o x no construtor da classe?))

 
Vladimir Simakov:

Sim, e de onde você tira x no construtor da classe?)

o ponto não é sobre x) mas que pode haver um flutuador na extremidade receptora, apenas 0,0 também não é confiável

 
Alexandr Andreev:

o ponto não é o x) mas que pode haver um flutuador no receptor além do duble, e especificar apenas 0,0 também não é confiável

embora tudo isso seja um detalhe... não especialmente importante

 
Alexandr Andreev:

o ponto não é sobre x) mas que pode haver flutuação na recepção pelo duble, portanto especificar apenas 0,0 também não é confiável.

Não importa o que inicializar lá, mesmo int - qualquer número para chamar este construtor

e eu escolhi 0,0 para evitar erros de impressão - qualquer dígito, ou seja, 0,0 é mais difícil de escrever e imprimir mal do que 123